这是我关于StackOverflow的第一个问题,因此始终欢迎提出有关如何使问题更明确的建议。
我有一个点数据的CSV,其结构如下所示:
OBJECTID,CART_ID,SHAPE
1,ABC,"(1.2, -4.5)"
2,ABD,"(3.8, 9.1)"
在python 3.5中使用petl模块,我试图将SHAPE字符串转换为float对象的两个独立列。使用我从petl文档中了解的内容,我应该能够分三个步骤进行操作。
打开CSV:
a = petl.fromcsv('file.csv')
将SHAPE从字符串转换为元组:
b = petl.convert(a, 'SHAPE', tuple)
使用.unpack()将元组分为两列:
c = petl.unpack(b, 'SHAPE', ['LAT', 'LON']
我相信这将导致一个CSV文件,如下所示:
OBJECTID,CART_ID,LAT,LON
1,ABC,1.2,-4.5
2,ABD,3.8,9.1
而是.convert()产生:
OBJECTID,CART_ID,SHAPE
1,ABC,('(', '1', '.', '2', ',', ' ', '-', '4', '.', '5', ')')
任何关于a).convert()正在做什么,或b)如何重组CSV的帮助将不胜感激。
谢谢。
完整代码:
import petl
a = petl.fromcsv('file.csv')
petl.look(a)
b = petl.convert(a, 'SHAPE', tuple)
petl.look(b)
c = petl.unpack(b, 'SHAPE', ['LAT', 'LON']
petl.look(c)
最佳答案
您没有像petl expects这样的复合表,您仍然有一个字符串。您需要将其传递给其他函数以对其进行解释:
>>> ast.literal_eval('(1, 2)')
(1, 2)
读者可以将
ast.literal_eval()
集成到petl中作为练习。