多くの研究の結果、私のコードでこのエラーが表示される理由を理解できません。Python - TypeError:文字列またはバイトオブジェクトを期待しています
Pandas DataframeをOracleテーブルにエクスポートしようとしています。私はこの数百回も他のデータテーブルでも成功しましたが、このエラーは引き続き発生します。
S USTAINABLE H ARVEST S ECTOR| QUOTA LISTING APRIL 16 2013 Unnamed: 1 \
1 DATE TRADE ID
2 04/02/13 130014
3 0 0
4 0 0
5 0 0
6 FY13 QUOTA – TO BUY 0
7 DATE TRADE ID
8 3/26/13 130006
9 4/9/13 130012
10 3/26/13 130007
11 3/26/13 130001
12 3/26/13 130009
13 4/9/13 130013
14 3/26/13 130010
15 3/26/13 130008
16 3/26/13 130011
17 1 0
Unnamed: 2 Unnamed: 3 Unnamed: 4 email_year \
1 AVAILABLE STOCK AMOUNT BUY PRICE 2013
2 WINTER SNE 12000 TRADE IN RETURN FOR 2013
3 0 0 HADDOCK GOM, 2013
4 0 0 YELLOWTAIL GOM, OR 2013
5 0 0 WITCH - OFFERS 2013
6 0 0 0 2013
7 DESIRED STOCK AMOUNT BUY PRICE 2013
8 COD GBE ANY OFFERS 2013
9 COD GBW UP TO 100,000 0.3 2013
10 COD GBW ANY OFFERS 2013
11 COD GOM INQUIRE 1.5 2013
12 WINTER GB ANY OFFERS 2013
13 WINTER SNE UP TO 100,000 0.3 2013
14 WINTER SNE ANY OFFERS 2013
15 YELLOWTAIL GB ANY OFFERS 2013
16 YELLOWTAIL GOM ANY TRADE FOR GB STOCKS -\nOFFERS 2013
17 0 0 0 2013
email_month email_day
1 4 16
2 4 16
3 4 16
4 4 16
5 4 16
6 4 16
7 4 16
8 4 16
9 4 16
10 4 16
11 4 16
12 4 16
13 4 16
14 4 16
15 4 16
16 4 16
17 4 16
私のコードがエラーでエクスポートラインcursor.executemany(sql_query, exported_data)
に失敗します:
Traceback (most recent call last):
File "Z:\Code\successful_excel_pdf_code.py", line 74, in <module>
cursor.executemany(sql_query, exported_data)
TypeError: expecting string or bytes object
ここ
は、私がpd.read_excel
で読み込み、簡単なdf['column_name'] = variable
コマンドで自分の列の3を付加し、私のデータフレームであり、
df = pd.read_excel(file_path)
df = df.fillna(0)
df = df.ix[1:]
cursor = con.cursor()
exported_data = [tuple(x) for x in df.values]
#exported_data = [str(x) for x in df.values]
#print("exported_data:", exported_data)
sql_query = ("INSERT INTO FISHTABLE(date_posted, stock_id, species, pounds, advertised_price, email_year, email_month, email_day, sector_name, ask)" "VALUES(:1, :2, :3, :4, :5, :6, :7, :8, 'Sustainable Harvest Sector', '1')")
cursor.executemany(sql_query, exported_data)
con.commit() #commit to database
cursor.close()
con.close()
:
は、ここに私の関連するコードですここ
はexported_data
のプリントアウトです:
[('DATE', 'TRADE ID', 'AVAILABLE STOCK', 'AMOUNT', 'BUY PRICE', '2013', '4', '16'), ('04/02/13', 130014, 'WINTER SNE', 12000, 'TRADE IN RETURN FOR', '2013', '4', '16'), (0, 0, 0, 0, 'HADDOCK GOM,', '2013', '4', '16'), (0, 0, 0, 0, 'YELLOWTAIL GOM, OR', '2013', '4', '16'), (0, 0, 0, 0, 'WITCH - OFFERS', '2013', '4', '16'), ('FY13 QUOTA – TO BUY', 0, 0, 0, 0, '2013', '4', '16'), ('DATE', 'TRADE ID', 'DESIRED STOCK', 'AMOUNT', 'BUY PRICE', '2013', '4', '16'), ('3/26/13', 130006, 'COD GBE', 'ANY', 'OFFERS', '2013', '4', '16'), ('4/9/13', 130012, 'COD GBW', 'UP TO 100,000', 0.3, '2013', '4', '16'), ('3/26/13', 130007, 'COD GBW', 'ANY', 'OFFERS', '2013', '4', '16'), ('3/26/13', 130001, 'COD GOM', 'INQUIRE', 1.5, '2013', '4', '16'), ('3/26/13', 130009, 'WINTER GB', 'ANY', 'OFFERS', '2013', '4', '16'), ('4/9/13', 130013, 'WINTER SNE', 'UP TO 100,000', 0.3, '2013', '4', '16'), ('3/26/13', 130010, 'WINTER SNE', 'ANY', 'OFFERS', '2013', '4', '16'), ('3/26/13', 130008, 'YELLOWTAIL GB', 'ANY', 'OFFERS', '2013', '4', '16'), ('3/26/13', 130011, 'YELLOWTAIL GOM', 'ANY', 'TRADE FOR GB STOCKS -\nOFFERS', '2013', '4', '16'), (1, 0, 0, 0, 0, '2013', '4', '16')]
1)私はエラーがデータフレームに点在しているNaN
秒のロットからかもしれないと思ったので、私は0のでそれらを置き換え、それはまだ失敗します。
2)私は、エラーが何も貴重な情報を保有していない最初のカップルの行をエクスポートしようとしているからかもしれないと思ったので、私はdf = df.ix[1:]
で最初の行を削除したが、それはまだ失敗。
3)私もそれが原因で私のemail_year/month/day
列の値を失敗すると考えていたので、私は私のデータフレームにそれらを置く前に、文字列にそれらをすべて変更しましたが、それはまだ失敗。
4) Iはtuple
の代わりstr
にexported_data
コマンドを変更しようとしただけcx_Oracle.DatabaseError: ORA-01036: illegal variable name/number
にエラーを変更したこと。また、他のデータフレームをエクスポートするときは、常にtuple
として正常に機能しています。
5)私はそれがいずれかのエラーの原因ではないエラーが私のOracle列が数字や文字のいずれかを許可していないからかもしれないと思ったが、それらはすべて、すべてのVarChar2
に設定されています。
私はこれを解決する助けに感謝しました。
質問に完全なエラートレースバックを追加してください! –
すべて追加しました – theprowler
実行可能なスタンドアロンのテストケースを作成できますか?問題はおそらく型の変更によるものです。特定の列については、1つの行は文字列であってもよく、次の行については整数であってもよい。それがそのエラーが発生する理由の1つです。 –