首页 > 解决方案 > 展平熊猫数据框中的数组json对象列的数组

问题描述

0    [{'review_id': 4873356, 'rating': '5.0'}, {'review_id': 4973356, 'rating': '4.0'}]
1    [{'review_id': 4635892, 'rating': '5.0'}, {'review_id': 4645839, 'rating': '3.0'}] 

我有一种情况,我想在这里解决这样的 json:Converting array of arrays into flattened dataframe

但我想创建新列,以便输出为:

review_id_1  rating_1  review_id_2  rating_2
4873356       5.0      4973356      4.0 
4635892       5.0      4645839      3.0

任何帮助都非常感谢..

标签: pythonarraysjsonpandas

解决方案


这种类型的数据修改往往是手动的。

# Sample data.
df = pd.DataFrame({
    'json_data': [
        [{'review_id': 4873356, 'rating': '5.0'}, {'review_id': 4973356, 'rating': '4.0'}],
        [{'review_id': 4635892, 'rating': '5.0'}, {'review_id': 4645839, 'rating': '3.0'}],
    ]
})

# Data transformation:
# Step 1: Temporary dataframe that splits data from `df` into two columns.
df2 = pd.DataFrame(zip(*df['json_data']))  
# Step 2: Use a list comprehension to concatenate the records from each column so that the df now has 4 columns.
df2 = pd.concat([pd.DataFrame.from_records(df2[col]) for col in df2], axis=1)
# Step 3: Rename final columns
df2.columns = ['review_id_1', 'rating_1', 'review_id_2', 'rating_2']
>>> df2
   review_id_1 rating_1  review_id_2 rating_2
0      4873356      5.0      4635892      5.0
1      4973356      4.0      4645839      3.0

推荐阅读