【问题标题】:Index DataFrame values until a value/string is reached索引 DataFrame 值,直到达到一个值/字符串
【发布时间】:2017-07-21 00:41:11
【问题描述】:

我有一个 Excel 电子表格,我想将其中的基本数据导出到我的 Oracle 表中。

不过,Excel 工作表在某些单元格中有多余的不必要数据。它还会在中途分裂,表明可用鱼和所需鱼之间的差异。我需要捕捉这种差异。

所以我的目标是导出所有数据,但在我的 Oracle 数据库中,我需要区分提供的鱼和想要的鱼。那么有没有办法对列进行索引,直到索引达到QUOTA TO BUY?因此允许我在我的ask 列中导出带有1 的第一个块,并在我的bid 列中导出带有1 的第二个块。

到目前为止我尝试过的代码如下,以及 Excel 表格的图片。感谢您的帮助。

import os
import numpy as np
import pandas as pd
import cx_Oracle
import re
from dateutil import parser

dsnStr = cx_Oracle.makedsn("sole.noaa.gov", "1526", "sole")
con = cx_Oracle.connect(user="user", password="passsword", dsn=dsnStr)

path = 'Z:\\excel_file_to_convert'

#pattern = re.compile(r'Sent:(.+?)(?=<br/>)')

for filename in os.listdir(path):
    file_path = os.path.join(path, filename)
    if os.path.isfile(file_path):
        df = pd.read_excel(file_path)
        print("df is:", df)
        print("column 1 I think:", df[:DESIRED STOCK])
        print("row 1:", df.loc[0])
        print("row 2:", df.loc[1])
        print("row 3:", df.loc[2])
        print("row 4:", df.loc[3])
        print("row 5:", df.loc[4])

        #d = parser.parse(df, fuzzy=True)
        #print(d)        

        #df['DATE'] = pd.to_datetime(df['DATE'])         # convert date column to datetimes 
        #latest_date = df['DATE'].max()                 # find the latest datetime
        #latest_rows = df[df['DATE'] == latest_date]     # use index filtering to choose only columns equal to latest date
        #print ("latest_rows is:", latest_rows)



cursor = con.cursor()
exported_data = [tuple(x) for x in df.values]
sql_query = ("INSERT INTO ROUGHTABLE(species, date_posted, stock_id, pounds, money, sector, ask)" "VALUES(:3, :1, :2, :4, :5, 'Sustainable Harvest Sector', '1')")

#sql_query = ("INSERT INTO DATABASE(species, trade_date, trade_id, pounds, advertised_price, email_year, email_month, email_day, sector, ask)" "VALUES(:3, :1, :2, :4, :5, :6, :7, :8, 'Sustainable Harvest Sector', '1')")
cursor.executemany(sql_query, exported_data)
con.commit() #commit to database

cursor.close()
con.close()

【问题讨论】:

    标签: python excel oracle


    【解决方案1】:

    除非您需要反复执行此操作,否则您不需要使用其他语言。

    将其粘贴到单元格F4 中并将其复制到您要在第一个块中插入的所有行中。

    ="INSERT INTO ROUGHTABLE(date_posted, stock_id, species, pounds, money, sector, ask) VALUES ( DATE '"&YEAR(A4)&"-"&MONTH(A4)&"-"&DAY(A4)&"', "&B4&", '"&C4&"', '"&D4&"', "&E4&", 'Sustainable Harvest Sector', '1' );"
    

    将生成的 SQL 语句复制并粘贴到脚本中,然后在 SQL/Plus 中运行。

    然后您可以编辑第二个块的公式并根据需要重复该过程。

    【讨论】:

    • 我确实需要重复执行此操作....这是否意味着这段 SQL 代码无法在其他 Excel 工作表上运行?
    • 如果格式相同,您可以将其复制并粘贴到多个电子表格中。只需编辑需要编辑的部分(如sectorask/bid 列),使其对每张工作表都正确。如果您要为几张纸做它,那么它会起作用,但如果您要做数百张或每周都做,那么花时间像您开始那样编写一个程序化解决方案可能是值得的。
    • 嗯好的。我必须做大约 120 次,然后每周一次。所以我想理想情况下我想让程序来做。老实说,大多数电子表格在AvailableDesired 之间没有分割,所以我可能只是手动输入这个。但是我现在遇到的问题是我需要在第一个单元格中始终遵循LISTING 的日期,所以我想我会为它使用 RegEx,但我对 RegEx 不是很好,所以这需要一段时间。然后我需要处理捕获所有基本数据,但要摆脱前两个标题单元格
    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多