如何解决Pandas Series的sql存储错误?

时间:2018-10-08 10:03:52

标签: python pandas dataframe pandas-to-sql

我正在尝试将csv文件导入pandas Dataframe并将此Dataframe写入PostgreSQL数据库。但是,将数据框写入SQL数据库后,最终的SQL数据库中将出现不在数据框中的行。

原始数据文件包含一些测量错误,这些测量错误存储为“无”,我通过以下方式将其作为NaN值替换在数据框中:

 modes['wspd [m/s]'].replace('None', np.NaN, inplace=True)

然后,我通过以下方式将数据框写入SQL数据库:

result.to_sql( sql_table, schema='earth', con=engine, index=False, if_exists='replace', chunksize=10000)

我使用的块大小为10000,因为我要写入的总数据帧包含13.000.000行。这是奇怪的部分,例如,我要写入SQL数据库的Dataframe中的第60-68行看起来像:

date_time                 ...        cross_wnd [kt]                                       
2017-03-07T00:10:00       ...             -7.910255
2017-03-07T00:10:10       ...             -7.119229
2017-03-07T00:10:20       ...             -7.119229
2017-03-07T00:10:30       ...             -7.910255
2017-03-07T00:10:40       ...             -7.910255
2017-03-07T00:10:50       ...             -7.910255
2017-03-07T00:11:00       ...             -7.910255
2017-03-07T00:11:10       ...             -7.910255

但是在最终的SQL数据库中,相同的第60-68行包含具有不同日期的新行(因此是csv文件),其无值替换为NaN:

    date_time                 ...        cross_wnd [kt]
60  2017-03-07T00:10:00       ...             -7.910255
61  2017-03-07T00:10:10       ...             -7.119229
62  2017-03-07T00:10:20       ...             -7.119229
63  2017-03-07T00:10:30       ...             -7.910255
64  2017-03-07T00:10:40       ...             -7.910255
65  2017-03-25T10:54:30       ...                   NaN
66  2017-03-07T00:10:50       ...             -7.910255
67  2017-03-07T00:11:00       ...             -7.910255

此奇怪的功能仅在2017-03-25的csv文件中的每8行中每66行发生一次,该行包含None值并已被替换。其余文件均已正确处理,None值被替换而没有任何麻烦,其余Dataframe存储到SQL数据库。

任何人都知道如何发生这种情况以及如何解决?我只可以在最终的SQL数据库中删除这8行,但是我想使用python脚本获取更多数据文件。可能是由于replace函数中的inplace = True参数引起的吗?还是由于大量行未正确写入数据库?

0 个答案:

没有答案