Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-TypeError:需要字符串或字节对象_Python_Sql_Pandas_Dataframe_Cx Oracle - Fatal编程技术网

Python-TypeError:需要字符串或字节对象

Python-TypeError:需要字符串或字节对象,python,sql,pandas,dataframe,cx-oracle,Python,Sql,Pandas,Dataframe,Cx Oracle,经过大量的研究,我不明白为什么我的代码中会出现这个错误 我正在尝试将Pandas数据帧导出到我的Oracle表中。我已经在其他数据表上成功地这样做了数百次,但这一次不断产生错误 这是我的数据框,我用pd.read\u excel读入,并用简单的df['column\u name']=variable命令附加了我自己的三列: S USTAINABLE H ARVEST S ECTOR| QUOTA LISTING APRIL 16 2013 Unnamed: 1 \ 1

经过大量的研究,我不明白为什么我的代码中会出现这个错误

我正在尝试将Pandas数据帧导出到我的Oracle表中。我已经在其他数据表上成功地这样做了数百次,但这一次不断产生错误

这是我的数据框,我用
pd.read\u excel
读入,并用简单的
df['column\u name']=variable
命令附加了我自己的三列:

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  
“我的代码”在导出行
光标上失败。ExecuteMay(sql\u查询,导出的\u数据)
出现错误:

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
这是导出的数据的打印输出:

[('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,0,0,'HADDOCK GOM','2013','4','16'),(0,0,0,0,0,'WITCH OFFERS','2013','4','16'),('FY13配额–购买',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'),('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',冬季GB',任何',报价',2013',4',16'),('4/9/13',130013',冬季SNE',最高100000',0.3',2013',4',16'),('3/26/13',130010',冬季SNE',任何',报价',2013',4',16'),('3/26/13',130008,'YELLOWTAIL GB','ANY','OFFERS','2013','4','16'),('3/26/13',130011,'YELLOWTAIL GOM','ANY','GB股票交易-\nOFFERS','2013','4','16'),(1,0,0,0,'2013','4','16')。

1)我认为错误可能是由于大量的
NaN
分散在整个数据帧中,因此我将它们替换为0,但仍然失败

2)我当时认为错误可能是因为试图导出没有任何有价值信息的前几行,所以我用
df=df.ix[1://code>删除了第一行,但仍然失败

3)我还认为它可能会失败,因为我的
email\u year/month/day
列中的值,所以在将它们放入数据帧之前,我将它们全部更改为字符串,但它仍然失败

4)我尝试将
exported_data
命令更改为
str
,而不是
tuple
,但这只会将错误更改为
cx\u Oracle.DatabaseError:ORA-01036:非法变量名称/编号
。此外,在导出其他数据帧时,它始终可以作为
元组

5)我认为错误可能来自我的Oracle列,不允许数字或字母,但它们都设置为all
VarChar2
,因此这也不是错误的原因


非常感谢您提供的帮助,谢谢。

根据上面提到的导出数据,您遇到的问题是由于一行中的数据与后续行中的数据类型不同。在本例中,一行的值为“04/02/13”(作为字符串),下一行的值为0(作为整数)。您需要确保所有行的列的数据类型一致。

请将完整的错误回溯添加到您的问题中!你能创建一个可以运行的独立测试用例吗?问题可能是由于类型的改变。对于特定列,一行可以是字符串,下一行可以是整数。这就是引发该错误的原因之一。我实际上认为这可能是错误发生的原因……但我不知道如何从该数据帧中隔离或捕获单个列,尤其是因为这些列没有命名,并且正在尝试
打印(“第1行:”,['DATE']
fails@AnthonyTuininga因此,我已经能够单独打印每一列,所有未命名的列和第一个以
S custainable
开头的列,并且我已经确认它们都是
dtype:object
。我不知道这到底是好是坏,甚至意义重大。好吧,这足够有意义了…有足够简单的要这样做吗?要将一个数据框的所有数据类型都更改为同一个数据框?所以我想出来了,并且能够将所有的值都更改为字符串。谁知道为什么创建数据框会使一些值变成字符串,而其他值变成整数。但是感谢您指出了它的问题所在,现在我可以继续导出大量的数据类型了所有行的一致性都很重要。
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()