2017-03-01 9 views
0

私はExcelスプレッドシートを持っており、そこから重要なデータをOracleテーブルにエクスポートしたいと考えています。値/文字列に達するまでのインデックス値DataFrame

Excelシートには、特定のセルに不要なデータがあります。また、利用可能な魚と所望の魚との間の差異を示す途中で分割する。私はこの違いを捕らえる必要があります。

私の目標はすべてのデータをエクスポートすることですが、Oracleデータベースでは、提供される魚と目的の魚を区別する必要があります。インデックスがQUOTA TO BUYに達するまで列をインデックスする方法はありますか?したがって、1の最初のチャンクをaskカラムにエクスポートし、1という2番目のチャンクをbidカラムにエクスポートすることができます。

私がこれまでに試したコードは、Excelテーブルの画像と同様に以下のとおりです。助けてくれてありがとう。

enter image description here

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() 

答えて

0

あなたはこれを繰り返し行う必要がある場合を除き、あなたは追加の言語を使用する必要はありません。

これをセル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で実行します。

2番目のブロックの数式を編集し、必要に応じて処理を繰り返すことができます。

+0

私はこれを繰り返し実行する必要はありますが....それは、このビットのSQLコードが他のExcelシートでは機能しないことを意味しますか? – theprowler

+0

すべて同じ形式の場合は、複数のスプレッドシートにコピーして貼り付けることができます。 'セクター'や 'ask' /' bid'列のように編集が必要な部分を編集して、シートごとに正しいようにしてください。一握りのシートのためにそれをやっているのであれば、それはうまくいくでしょう。しかし、あなたが何百ものためにそれをやっているなら、毎週それをやっていれば、あなたが始めたようなプログラム的な解決策を書く時間を費やす価値があるかもしれません。 – MT0

+0

うんうん。私はそれを約120分間しなければならず、その後は一週間に一度それをしなければならない。だから私は理想的には、私はプログラムがそれをやりたいと思う。正直言って、スプレッドシートのほとんどは「Available」と「Desired」の間に分かれていないので、私はちょうど手でこれを入力するつもりです。しかし、私が今実行している問題は、最初のセルで常に 'LISTING'に続く日付が必要なことです。そのために私はRegExを使用しますが、私はRegExではあまり良くありませんので、これはしばらく時間がかかります。それから私はすべての重要なデータのキャプチャに取り組む必要がありますが、最初の2つのタイトルセル – theprowler

関連する問題