【发布时间】:2019-09-08 03:33:54
【问题描述】:
我正在处理 python 上的 pandas 项目。我收到这样的 .csv 文件作为输入:
姓名、时间、数据 A,5.6,"[1,2,3]" A,1.2,"[1.4,3,8.9]" ... B,3.4,"[0.2,3,5.1]" 抄送..(我有每个名字的数千个数据,比如 10 个名字)。 所以在 pandas 中,表格是:
名称时间数据 5.6 [1,2,3] 1.2 [1.4,3,8.9] ... B 3.4 [0.2,3,5.1] ...我需要将“数据”列中列表的所有数字转换为另一个度量单位(所以基本上,将列表的每个数字乘以一个标量)。 我遇到了问题,因为在我收到的 csv 中,数据被保存为字符串。所以首先我必须将字符串转换为浮点数列表,然后将列表中的 3 个数字乘以标量(例如 2),然后再次将列表转换为字符串。
我知道对整列执行操作就像:
df['Data'] = df['Data'].apply(lambda x: x*2)
我可以用这种方式将列表“a”的每个数字相乘:
[x*2 for x in a]
我可以将字符串转换为带有 ast 的列表:
a = ast.literal_eval(a) # (and with a = str(a).strip('[]') i can return to the string)
但我不能把这三件事结合起来。
你有什么解决办法吗? (不一定使用我在这里尝试的相同方法)。 提前谢谢!
【问题讨论】:
-
只需将您的 3 个命令加入到
apply和lambda中,如下所示df.Data.apply(lambda x: str([y*2 for y in ast.literal_eval(x)]))。您要将列表转换回字符串的最后一步似乎很奇怪。