python - 将 list 类型的 pandas 列转换为 dict
问题描述
长度为n的Pandas 列属于list类型。
df['size'][0] = [{'Name': 'Total', 'Value': 50, 'Unit': 'Units'}]
type(df['Size'][0])
list
我想将列表转换为字典。即type(df['Size'][0]) dict
。
{'Name': 'Total',
'Value': 50,
'Unit': 'Units'}
对于上下文,我正在尝试将字典解析为多列。
# Unpack Size
for i, row in df.iterrows():
if type(row['Size'][i]) is dict:
dict_obj = row['Size'][i]
for key, val in dict_obj.items():
if key == 'Name':
df.loc[index, 'Size_Name'] = val
if key == 'Value':
df.loc[index, 'Size_Value'] = val
if key == 'Unit':
df.loc[index, 'Size_Unit'] = val
解决方案
可以有 n 个字典。
当您在列表中使用任意数量的字典时df.explode
df = pd.DataFrame({'size':[[{'a':1},{'b':1}],[{'a':2}],[{'c':2},{'d':2},{'e':4}]]})
df
size
0 [{'a': 1}, {'b': 1}]
1 [{'a': 2}]
2 [{'c': 2}, {'d': 2}, {'e': 4}]
df.explode('size')
size
0 {'a': 1}
0 {'b': 1}
1 {'a': 2}
2 {'c': 2}
2 {'d': 2}
2 {'e': 4}
如果它总是一个字典的列表,即df['size'][x] = [{...}]
使用itertools.chain.from_iterable
from itertools import chain
df['size'] = list(chain.from_iterable(df['size']))
推荐阅读
- c# - 将滚动条添加到 DataGridViewTextBoxColumn
- python-3.x - 如何在 python 3 中使用 psutil 从服务 pid 获取父进程 ID
- java - Convert linked image contain word file to embedded image html file
- spring-boot - Kafka Producer Thread, huge amound of threads even when no message is send
- powershell - SQL Azure powershell commands not recognized anymore. Deprecated?
- visual-studio - 问题 - 为什么 TFS 采用 Msbuild 10.0 而不是版本 14.0?
- java - Java:网络/套接字
- python - How to get maximum column condensed in one row with Pandas?
- javascript - JavaScript 奇怪的箭头函数
- docker - 环境变量 vue js、azure kubernetes 服务、docker 容器