python - 将列表的数据框转换为可以操作每个列表以进行进一步分析的格式
问题描述
我有一个从 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]}])
上面的代码将工作
解决方案
想到的一种方法是用来literal_eval
解决字符串与浮点问题:
from ast import literal_eval
df['z']=df['z'].apply(literal_eval)
df['sum_z']=df['z'].apply(lambda x: sum(x))
推荐阅读
- angular - 如何在 Angular 中翻译 mat-paginator 并选择 pageSizeOptions ALL
- html - 引导卡没有响应
- maven - 如何使用类似选项的命令覆盖 Maven 属性?
- android - React Native Android 生产版本仍然表现得像一个开发版本
- qt - Qt creator:堆叠的小部件弹出
- c# - 如何为整个 Winform 应用程序设置文化
- asp.net - 在 Heroku 中使用 Entity Framework、ASP.NET MVC Core 和 PostgreSQL
- php - 尝试从 AJAX 调用返回数据时出现意外结果
- rest - Yahoo Gemini 沙盒创建“INVALID_EMAIL_ADDRESS”
- postgresql - postgres / docker: password authentication failed for user