我有一个从csv导入的数据框,其中每个“单元格”都是值列表,所以csv看起来像:
时间,x,y,z
2020-05-01 11:38:20.177314,“ ['a','a','a']”,“ ['1','2','3']”,“ [8.16,0.27,8.16 ]“
2020-05-01 11:38:20.637325,“ ['a','a','a']”,“ ['4','5','6']”,“ [18.16,10.27,18.16 ]“
df中的每一行都是x,y,z值,以创建一个海洋热图。我需要对数据进行多种操作,例如获取每一行中所有“ z”值的总和,然后为每一行重新创建热图。我甚至无法让大熊猫将数据识别为列表。相反,它们似乎是字符串对象。我已经尝试过df['zList']=df['z'].tolist()
,但是仍然无法将数据作为列表使用。
类似的东西:
sumList=[]
for row in df.itertuples(index=True, name='Pandas'):
sumList0=0
zList0=row.zList
print(zList0)
for i in zList0:
sumList0+=float(i)
print(sumList0)
sumList.append(sumList0)
print(sumList)
将失败,并显示错误
ValueError:无法将字符串转换为float:'['
但是如果我手动创建df
df = pd.DataFrame([{'x':['a','b','c'], 'y':['1','2','3'], 'zList':[12,34.2,15.1]},
{'x':['a','b','c'], 'y':['4','5','6'], 'zList':[15.0,6.5,11.7]}])
上面的代码将起作用
答案 0 :(得分:1)
想到的一种方法是使用literal_eval
解决字符串vs浮点问题:
from ast import literal_eval
df['z']=df['z'].apply(literal_eval)
df['sum_z']=df['z'].apply(lambda x: sum(x))