python - 将字符串作为列表重塑为行
问题描述
我有一个这样的熊猫数据框:
df = pandas.DataFrame({
'Grouping': ["A", "B", "C"],
'Elements': ['[\"A1\"]', '[\"B1\", \"B2\", \"B3\"]', '[\"C1\", \"C2\"]']
}).set_index('Grouping')
所以
Elements
Grouping
===============================
A ["A1"]
B ["B1", "B2", "B3"]
C ["C1", "C2"]
即一些列表被编码为字符串作为列表。什么是一种干净的方法可以将其重塑为一个整洁的数据集,如下所示:
Elements
Grouping
====================
A A1
B B1
B B2
B B3
C C1
C C2
不诉诸for循环?我能想到的最好的是:
df1 = pandas.DataFrame()
for index, row in df.iterrows():
df_temp = pandas.DataFrame({'Elements': row['Elements'].replace("[\"", "").replace("\"]", "").split('\", \"')})
df_temp['Grouping'] = index
df1 = pandas.concat([df1, df_temp])
df1.set_index('Grouping', inplace=True)
但这很丑陋。
解决方案
您可以使用.str.extractall()
:
df.Elements.str.extractall(r'"(.+?)"').reset_index(level="match", drop=True).rename({0:"Elements"}, axis=1)
结果:
Elements
Grouping
A A1
B B1
B B2
B B3
C C1
C C2
推荐阅读
- reactjs - 如何使用反应在离子框架中调用api?
- sql-server - 与 SQL Server 建立连接时发生与网络相关或特定于实例的错误
- python-2.7 - Twyton / 命令“python setup.py egg_info”失败,错误代码 1 在 /tmp/pip-install-ui3eeW/twython/
- html - 试图将html表单数据提交到excel
- amazon-web-services - 无服务器 AWS:扩展默认 IAM 角色的权限
- android - 使用带有 Android 导航组件的 Firebase 电子邮件登录链接
- sql - Db2 SQL 根据大量数据选择排除行的行
- php - PHP Quiz 使用数组生成问题。如何计算积分?
- python - 将 pandas .loc 与日期结合使用不同的 datetimeindex
- xml - XSD:正则表达式我不知道为什么它无效