如何清理从 JSON 转换为 Pandas DataFrame 的数据?

问题描述 投票:0回答:1

我有一个 JSON 列表,我使用以下代码对其进行了规范化:

json_nor = pd.json_normalize(data, max_level=1)

pd.set_option('display.max_colwidth', None)

#view json_nor
json_nor

这是查看json_nor时的结果

然后我使用以下代码清理了这些数据:

df = json_nor.explode('APIResponse.data').reset_index(drop=True)

# Normalize the 'APIResponse.data' column into a DataFrame
data_df = pd.json_normalize(df['APIResponse.data'])

# Drop the 'APIResponse.data' column from the original DataFrame
df = df.drop('APIResponse.data', axis=1)

# Concatenate the original DataFrame and the normalized DataFrame along the columns axis
df = pd.concat([df, data_df], axis=1)

#show the datafram
df

这是 df

的输出

更改此设置的最佳方法是什么,以便每个地址占一行,并且与该地址关联的每个姓名、电话和电子邮件都有一个单独的列?

我正在考虑使用 pandas .split() 方法,但不可能知道每个地址的最终输出有多少列,因为每个地址都有不同数量的与其关联的姓名、电话和电子邮件。我也在考虑使用正则表达式,但找不到正确的方法。

json pandas dataframe data-cleaning
1个回答
0
投票

两个步骤:

1- 首先您需要将它们展开为列。

2-然后使用melt将数据帧从宽转换为长。

# Use apply with pd.Series to expand the 'values' column into separate columns
values_expanded = df['emails'].apply(pd.Series)

# Combine the expanded columns back to the original DataFrame
result = df.drop(columns=['emails']).join(values_expanded)

# Use melt to convert wide DataFrame into long format
df_long = pd.melt(result, id_vars=['name']) 
© www.soinside.com 2019 - 2024. All rights reserved.