python - 如何从python pandas中的列中解析数据
问题描述
我有一个 csv 文件包含以下内容:
并需要解析它和预期的结果:
文本数据:
id,product_id
1,[{'p_id': 59, 'p_name': 'IPF'}, {'p_id': 63, 'p_name': 'RBC'}, {'p_id': 47, 'p_name': 'CSP'}]
2,[{'p_id': 25, 'p_name': 'LPP'}, {'p_id': 86, 'p_name': 'CRS'}, {'p_id': 47, 'p_name': 'CSP'}]
3,[{'p_id': 73, 'p_name': 'OCC'}, {'p_id': 63, 'p_name': 'RBC'}]
4,[{'p_id': 63, 'p_name': 'RBC'}, {'p_id': 31, 'p_name': 'SUT'}, {'p_id': 73, 'p_name': 'OCC'}]
5,[{'p_id': 63, 'p_name': 'RBC'}]
解决方案
正如我在评论中已经提到的,您拥有的数据没有包含在引号内的字符串值,例如 : in [{'p_id': 59, 'p_name': IPF}
,该值IPF
没有被引号括起来,因此您不能使用任何直接方法。
在几种方法中,最简单的方法是使用yaml
( pip install pyyaml
) 包将这些字符串值解析为 Python 对象,然后explode
应用pd.Series
:
import pandas as pd
import yaml
filePath = 'file.csv'
df = pd.read_csv(filePath, index_col=0)
out = (df['product_id'].apply(lambda x: yaml.load(x, yaml.Loader))
.explode()
.apply(pd.Series)
)
输出
>>> out
p_id p_name
id
1 59 IPF
1 63 RBC
1 47 CSP
2 25 LPP
2 86 CRS
2 47 CSP
3 73 OCC
3 63 RBC
4 63 RBC
4 31 SUT
4 73 OCC
5 63 RBC
推荐阅读
- swift - 如何获得二进制包的校验和?
- ios - 应用程序在后台时无法接收 SIP 呼叫
- python-3.x - django 中的 DRY 主体,因为需要在每个函数中使用相同的查询
- python - 查找最近的日期时用 np.where 替换 for 循环
- mysql - 我无法在 mysql 中加入没有重复的两个表
- spring-boot - 我正在盯着 Spring Boot Oauth2SSO。重写哪个方法来查看授权码的值?
- typescript - 初始化某个类的对象时如何强制所有属性初始化 打字稿
- flutter - 有没有办法在 Flutter 中改变宽度方向?
- google-sheets - Google 表格(下拉列表以更改下面行中的数据)
- c# - 我正在尝试删除 Vector2 向量列表中的 Vector2 项目,并将其与其他 Vector2 进行比较