python - 展平熊猫数据框中的数组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
任何帮助都非常感谢..
解决方案
这种类型的数据修改往往是手动的。
# 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
推荐阅读
- spring - 没有使用测试运行器 JUnit5 找到测试
- emacs-jedi - 如何将 emacs-jedi 与另一个 virtualenv 一起用于我的项目?
- java - Java List - 插入或替换的最佳方式
- sql - 从 SQL 查询访问超链接
- android - 什么是宏用于在 CMake 中查找 Android 平台?
- r - 如何计算每组滞后值的比率?
- javascript - 在 ExpressJS 中执行 res.send() 之前修改响应正文
- javascript - Web 组件 offsetHeight/offsetWidth 连接时为零
- kotlin - ViewModel 中的 Kotlin 高阶函数
- javascript - Google Drive 文件同时修改