首页 > 解决方案 > 将列表的数据框转换为可以操作每个列表以进行进一步分析的格式

问题描述

我有一个从 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 中的每一行都是用于创建 seaborn 热图的 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:无法将字符串转换为浮点数:'['

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

上面的代码将工作

标签: pythonpandascsv

解决方案


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

from ast import literal_eval

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

推荐阅读