如何用Pandas自动将含属性名/值的CSV转换为宽格式?
Pandas长格式转宽格式(无需手动循环)
完全不用自己写逐行循环的代码,Pandas内置了专门的方法可以快速实现长格式到宽格式的转换,效率比手动循环高得多,尤其是数据量较大的时候。
具体步骤:
- 第一步:直接用
pd.read_csv()读取CSV文件到DataFrame,不需要手动把CSV转字典再转DataFrame,这一步Pandas已经帮你做好了。 - 第二步:用
pivot()或pivot_table()方法完成格式转换:- 如果你的数据中,每个行ID+属性名的组合是唯一的,用
pivot()就足够了 - 如果存在重复的行ID+属性名组合,需要用
pivot_table()指定聚合方式(比如取第一个值、求和、求均值等)
- 如果你的数据中,每个行ID+属性名的组合是唯一的,用
示例代码(假设CSV的三列名为row_id、attr_name、attr_value):
import pandas as pd # 读取长格式CSV df_long = pd.read_csv('your_data.csv') # 转换为宽格式(无重复组合时用) df_wide = df_long.pivot( index='row_id', columns='attr_name', values='attr_value' ).reset_index() # 若存在重复组合,用pivot_table指定聚合方式,比如取第一个出现的值 # df_wide = df_long.pivot_table( # index='row_id', # columns='attr_name', # values='attr_value', # aggfunc='first' # ).reset_index()
转换完成后,df_wide就是你想要的宽格式数据:以row_id为普通列(或者保留为索引),每个attr_name作为单独的列,对应单元格是attr_value的值。
内容的提问来源于stack exchange,提问作者Zen Zac
相关产品推荐
相关产品推荐

