将列表的数据帧转换为可以对每个列表进行操作以进行进一步分析的格式



我有一个从csv导入的数据帧,其中每个"单元格"都是一个值列表,因此csv看起来像:

时间,x,y,z
2020-05-01 11:38:20.177314,"[‘a’,'a','a']","['1','2','3']","[8.16,0.27,8.16]">
202 0-05-01 11.38:20.637325,"[’a’,‘a',‘a''","[[4','5','6']"[18.16,10.27,18.16]">

df中的每一行都是x、y、z值,用于创建seaborn热图。我需要对数据进行大量操作,比如获得每行中所有"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:无法将字符串转换为浮点值:"[">

但如果我手动创建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]}])

以上代码将工作

想到的一种方法是使用literal_eval来解决字符串与浮点的问题:

from ast import literal_eval
df['z']=df['z'].apply(literal_eval)
df['sum_z']=df['z'].apply(lambda x: sum(x))

相关内容

  • 没有找到相关文章

最新更新