Python中将Parquet文件转换为指定格式对象列表的方法
解决方案
可以通过**pandas的透视表(pivot)**将长格式数据转换为宽格式,再导出为目标JSON格式,具体实现步骤如下:
1. 数据转换(长表转宽表)
利用pivot方法将attribute_name转为列名,attribute_value作为对应列的值,以user_id为分组依据:
import pandas as pd # 读取Parquet文件 df = pd.read_parquet('myfile.parquet', engine='pyarrow') # 转换为宽格式:user_id作为行索引,attribute_name转为列,attribute_value为值 wide_df = df.pivot(index='user_id', columns='attribute_name', values='attribute_value').reset_index() # 移除列名的层级标签 wide_df.columns = wide_df.columns.get_level_values(0)
如果数据中存在同一用户同一属性的多条记录,可以先按timestamp排序保留最新记录,再执行透视:
# 按user_id和attribute_name分组,保留最新的记录 df_sorted = df.sort_values('timestamp', ascending=False).drop_duplicates(subset=['user_id', 'attribute_name'], keep='first') wide_df = df_sorted.pivot(index='user_id', columns='attribute_name', values='attribute_value').reset_index() wide_df.columns = wide_df.columns.get_level_values(0)
2. 导出为目标JSON格式
使用to_json方法,指定orient='records'即可生成数组形式的JSON:
# 导出为JSON字符串 json_result = wide_df.to_json(orient='records', indent=2) # 如果需要保存到文件 with open('user_attributes.json', 'w') as f: f.write(json_result)
执行后生成的JSON格式与要求完全一致:
[ { "user_id": "111f07000612", "first_name": "Tom", "last_name": "Cruise", "city": "New York" }, { "user_id": "abcf0700d009d122", "first_name": "Matt", "last_name": "Damon" } ]
内容的提问来源于stack exchange,提问作者Maucan
相关产品推荐
相关产品推荐

