我有一个很大的csv文件,其中一列包含gps坐标列表作为float-tuples。当然,如果我将文件作为pandas数据帧读入,它们的类型就是String,这没什么用处。
我想要做的是将字符串转换为float-tuples列表,并将其保存为一种格式,我可以将其加载到数据帧中并运行查询。对此的重要限制是,我无法为整个大数据集计算此转换,因此转储二进制对象是不可取的。
根据我的阅读,似乎HDF存储应该能够以所需的格式保存数据并允许我追加行,所以我可以将字符串逐位转换为GPS条目,从而不会出现问题我的记忆力有限。
但是,当我尝试创建HDF文件时,我得到了:
TypeError: Cannot serialize the column [POLYLINE] because
its data contents are [mixed] object dtype
产生此错误的代码是:
df.to_hdf(filename, 'data', mode='w', format='table')
df在POLYLINE列上映射转换函数后,包含原始数据的一部分,这至少应该意味着此列中的所有数据都具有相同的类型。
如何解决产生的错误或哪些方法可能效果良好?
编辑:转换前的df.head()导致:
TRIP_ID CALL_TYPE ORIGIN_CALL ORIGIN_STAND TAXI_ID \
0 1372636858620000589 C NaN NaN 20000589
1 1372637303620000596 B NaN 7 20000596
2 1372636951620000320 C NaN NaN 20000320
3 1372636854620000520 C NaN NaN 20000520
4 1372637091620000337 C NaN NaN 20000337
TIMESTAMP DAY_TYPE MISSING_DATA \
0 1372636858 A False
1 1372637303 A False
2 1372636951 A False
3 1372636854 A False
4 1372637091 A False
POLYLINE
0 [[-8.618643, 41.141412], [-8.618499, 41.141376...
1 [[-8.639847, 41.159825999999995], [-8.64035099...
2 [[-8.612964, 41.140359000000004], [-8.613378, ...
3 [[-8.574678, 41.151951], [-8.574705, 41.151942...
4 [[-8.645994, 41.18049], [-8.645949, 41.180517]...
并在转换POLYLINE列后(省略其他列以节省空间):
POLYLINE
0 [[-8.618643, 41.141412], [-8.618499, 41.141376...
1 [[-8.639847, 41.159826], [-8.640351, 41.159871...
2 [[-8.612964, 41.140359], [-8.613378, 41.14035]...
3 [[-8.574678, 41.151951], [-8.574705, 41.151942...
4 [[-8.645994, 41.18049], [-8.645949, 41.180517]...
我现在已经更改了它,因此生成的输出也是列表而不是元组列表。检查这些元素中的单个元素表明转换前的条目是一个字符串,内部列表中的单个项目应该是浮点数,尽管它的打印方式并不清楚