python - Pandas:从另一列中的字典列表创建新列
问题描述
我在熊猫列的每个单元格中有一个任意数量的字典列表。
df['Amenities'][0]
[{'Description': 'Basketball Court(s)'},
{'Description': 'Bike Rack / Bike Storage'},
{'Description': 'Bike Rental'},
{'Description': 'Business Center'},
{'Description': 'Clubhouse'},
{'Description': 'Community Garden'},
{'Description': 'Complex Wifi '},
{'Description': 'Courtesy Patrol/Officer'},
{'Description': 'Dog Park'},
{'Description': 'Health Club / Fitness Center'},
{'Description': 'Jacuzzi'},
{'Description': 'Pet Friendly'},
{'Description': 'Pet Park / Dog Run'},
{'Description': 'Pool'}]
我想做以下事情。
1) 遍历 dicts 列表,解压它们并创建值为 1 的列(Amenities 退出)。
2)在后续迭代中,检查列标签是否已存在,然后将 1 作为值添加到单元格,如果不存在则创建一个新列。
3) 用 0 填充剩余的列。
基本上,我正在尝试从字典列表中创建包含值 0 和 1 的功能。
下面的代码基于 dict 值创建新列,但围绕检查列是否存在、如果不存在则创建新列以及分配 1 和 0 的部分需要一些思考。
for i, row in df.iterrows():
dict_obj = row['Amenities']
for key, val in dict_obj.items():
if val in df.columns:
df.loc[i, val] = 1
else
.......
预期结果是这样的:
解决方案
您的代码是一个很好的开始,而且非常接近!
正如您所说,您需要遍历字典。解决方案是.loc
在您的数据框(用于当前正在处理的便利设施)上创建新列(如果它尚不存在)或设置其值(如果存在)。
import pandas as pd
df = pd.DataFrame(
{
"Amenities": [
[
{"Description": "Basketball Court(s)"},
{"Description": "Bike Rack / Bike Storage"},
{"Description": "Bike Rental"},
],
[
{"Description": "Basketball Court(s)"},
{"Description": "Courtesy Patrol/Officer"},
{"Description": "Dog Park"},
],
]
}
)
for i, row in df.iterrows():
amenities_list = row["Amenities"]
for amenity in amenities_list:
for k, v in amenity.items():
df.loc[i, v] = 1
df = df.drop(columns="Amenities")
df = df.fillna(0).astype({i: "int" for i in df.columns})
简短描述:
i
是行索引,v
是设施名称(字符串)。df.loc[]
如果列索引不存在,则接受行索引、列索引并创建一个新列。
在 for 循环之后,我们只需删除不再需要的“Amentities”列,将所有 NA 值替换为 0,然后将所有列转换为整数(NA 值仅存在于浮点数,因此默认情况下它们以浮点数开头)。
推荐阅读
- python - 如何防止“填充”完全删除我的分组列?
- node.js - 使用 NodeJs 和 Express 部署 Web 应用程序
- php - 将 MySQL 和 PHP 与 Google 地图一起使用 - 未加载标记
- python - 在 ruamel.yaml 中,如何使用文字字符串“null”发出 ScalarEvent?
- powerapps-formula - 如何在 Powerapps 中设置多人组合框的 defaultSelectedItems 值?
- ios - 效果如何找出它所附加的 UIImageView 的显示大小?
- python - 如何解决 ValueError:数组长度为 %s,而 DataFrame 的长度为 %s?
- node.js - pdfmake 在服务器端为 CJK、阿拉伯语和其他外语安装自定义字体
- r - 具有动态窗口大小的滚动总和并跳过前几行
- css - 如何在不换行的情况下使 div 中的所有项目等宽?