将嵌套的字典列表转换成Pandas数据框架是Pandas中常用的数据预处理技巧之一。下面是详细的攻略:
准备数据
先准备一个嵌套的字典列表,例如:
data = [
{
'name': 'Alice',
'age': 25,
'skills': ['Python', 'Java', 'SQL'],
'contact': {
'email': 'alice@example.com',
'phone': '1234567890'
}
},
{
'name': 'Bob',
'age': 30,
'skills': ['Python', 'C++'],
'contact': {
'email': 'bob@example.com',
'phone': '0987654321'
}
}
]
这是一个包含两个字典的列表,每个字典都包含name
、age
、skills
和contact
四个属性。
转换为数据框架
接下来,我们需要把这个嵌套的字典列表转换成Pandas数据框架。可以使用pd.DataFrame
函数来完成转换:
import pandas as pd
df = pd.DataFrame(data)
这样,data
就被成功地转换成了一个Pandas数据框架。下面是转换后的数据框架:
name age skills contact
0 Alice 25 [Python, Java, SQL] {'email': 'alice@example.com', 'phone': '1234567890'}
1 Bob 30 [Python, C++] {'email': 'bob@example.com', 'phone': '0987654321'}
其中,每个字典的一个键被转换为了数据框架的一个列,每个字典的一个值被转换成了数据框架中的一行。
但是,我们可以发现,skills
和contact
两列的值还是一个嵌套的数据结构,不方便进一步的数据分析和处理。因此,我们需要进行下一步的操作。
展开嵌套的数据结构
为了方便后续的数据处理,我们需要将嵌套的数据结构展开成新的列。下面分别对skills
和contact
两个嵌套的数据结构进行展开。
展开skills
skills
是一个字符串列表,我们可以使用apply(pd.Series)
函数将其展开成新的列:
skills_df = df['skills'].apply(pd.Series)
skills_df.columns = ['skill_1', 'skill_2', 'skill_3']
这样,skills
列就被转换成了三个新的列skill_1
、skill_2
和skill_3
,包含了每个人的三种技能。
展开contact
contact
是一个字典,我们需要将其展开成两个新的列。可以使用apply(pd.Series)
函数将其展开,再与原来的数据框架合并:
contact_df = df['contact'].apply(pd.Series)
contact_df.columns = ['contact_email', 'contact_phone']
df = pd.concat([df, skills_df, contact_df], axis=1)
df = df.drop(['skills', 'contact'], axis=1)
这样,contact
列就被转换成了两个新的列contact_email
和contact_phone
。
完整代码
下面是完整的Python代码:
import pandas as pd
data = [
{
'name': 'Alice',
'age': 25,
'skills': ['Python', 'Java', 'SQL'],
'contact': {
'email': 'alice@example.com',
'phone': '1234567890'
}
},
{
'name': 'Bob',
'age': 30,
'skills': ['Python', 'C++'],
'contact': {
'email': 'bob@example.com',
'phone': '0987654321'
}
}
]
df = pd.DataFrame(data)
skills_df = df['skills'].apply(pd.Series)
skills_df.columns = ['skill_1', 'skill_2', 'skill_3']
contact_df = df['contact'].apply(pd.Series)
contact_df.columns = ['contact_email', 'contact_phone']
df = pd.concat([df, skills_df, contact_df], axis=1)
df = df.drop(['skills', 'contact'], axis=1)
print(df)
输出结果如下:
name age skill_1 skill_2 skill_3 contact_email contact_phone
0 Alice 25 Python Java SQL alice@example.com 1234567890
1 Bob 30 Python C++ None bob@example.com 0987654321
可以看到,skills
和contact
两个嵌套的数据结构已经被成功展开成了新的列,数据得到了进一步的清理和预处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 将嵌套的字典列表转换成Pandas数据框架 - Python技术站