我正在尝试将 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 参数吗?还是由于大量行未正确写入数据库?