pandas数据处理技巧1-df中的json元素转df的3种方法

发布网友 发布时间:6小时前

我来回答

1个回答

热心网友 时间:6小时前

在数据分析中,当DataFrame中包含JSON格式的数据时,需要将其转换为标准格式以便进一步处理。这里介绍三种常见的转换方法。


首先,假设有这样一个DataFrame,其中包含一个列(我们称之为'students')存储着JSON格式的数据:


1. json_normalize()方法


这种方法将JSON字典逐级展开,例如,将'students'列中的每个对象分解为身份(如年级和班级)等细粒度信息。例如:


python
import pandas as pd
students_df = pd.DataFrame({
'students': [{'身份': '学生1', '年级': '一年级', '班级': '1班'},
{'身份': '学生2', '年级': '二年级', '班级': '2班'}]
})
normalized_df = pd.json_normalize(students_df['students'])


2. Dataframe+concat方法


这种方法不完全展开JSON,而是根据DataFrame的结构进行合并。例如,班主任信息可以这样处理:


python
tmp_df = pd.DataFrame({'班主任': students_df['students'].apply(lambda x: x['身份'])})
result_df = pd.concat([students_df, tmp_df], axis=1)


3. Series+concat方法


类似地,通过Series操作实现,但也是将班主任信息分开:


python
tmp_df = students_df['students'].apply(lambda x: x['班主任'])
result_df = pd.concat([students_df.drop('students', axis=1), pd.DataFrame(tmp_df)], axis=1)


对于更复杂的嵌套JSON,如`contacts`列是列表且内部包含字典,可以借助`json_normalize()`的递归功能,但需要指定`record_path`参数来控制展开的层次。例如,`contacts2`列可以这样处理:


python
normalized_contacts = pd.json_normalize(students_df['students'].apply(lambda x: x['contacts2']), record_path='contacts2')


以上就是处理DataFrame中JSON元素的三种方法,它们各有优劣,根据实际需求选择合适的方式。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com