1

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

原始数据文件包含一些存储为 None 的测量误差,我通过以下方式在 Dataframe 中将其替换为 NaN 值:

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

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

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

我使用 10000 的块大小,因为我尝试写入的总 Dataframe 包含 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 文件),其中 None 值替换为 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

这个奇怪的功能每 66 行出现一次,仅适用于 2017-03-25 的 csv 文件中包含 None 值并已被替换的 8 行。其余文件被正确处理,无值被替换而没有任何问题,其余数据帧存储到 SQL 数据库中。

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

4

0 回答 0