Python如何移除CSV重复列并将其转换为行
转换宽格式CSV为长格式的方法
这里提供两种实用的Python pandas实现方案,帮你把重复的Date-Qty列转换为每行对应一组数据的格式。
方法一:使用wide_to_long(推荐)
这个函数专门针对这种带重复列名的宽格式数据设计,步骤简洁高效:
- 导入库并读取原始数据
import pandas as pd # 读取空格分隔的CSV,自动为重复列名添加.1、.2后缀 df = pd.read_csv('input.csv', sep='\s+', header=0)
- 转换为长格式
# 指定标识符列Name,以及要转换的列前缀Date和Qty long_df = pd.wide_to_long(df, stubnames=['Date', 'Qty'], i='Name', j='temp_col').reset_index() # 移除临时生成的temp_col列(不需要的话) long_df = long_df.drop('temp_col', axis=1)
- 保存结果
# 保存为空格分隔的CSV,不包含索引列 long_df.to_csv('output.csv', index=False, sep='\s+')
方法二:使用melt拆分合并
如果需要更灵活的自定义操作,可以通过两次拆分后合并的方式实现:
- 读取数据(同方法一)
import pandas as pd df = pd.read_csv('input.csv', sep='\s+', header=0)
- 分别拆分Date和Qty列
# 拆分所有Date相关列 date_df = df.melt(id_vars='Name', value_vars=['Date', 'Date.1', 'Date.2'], value_name='Date') # 拆分所有Qty相关列 qty_df = df.melt(id_vars='Name', value_vars=['Qty', 'Qty.1', 'Qty.2'], value_name='Qty')
- 匹配并合并数据
# 提取列名中的数字后缀用于匹配对应行 date_df['match_idx'] = date_df['variable'].str.extract('(\d+)', expand=False).fillna(0).astype(int) qty_df['match_idx'] = qty_df['variable'].str.extract('(\d+)', expand=False).fillna(0).astype(int) # 合并数据并保留需要的列 long_df = pd.merge(date_df, qty_df, on=['Name', 'match_idx'])[['Name', 'Date', 'Qty']]
- 保存结果(同方法一)
long_df.to_csv('output.csv', index=False, sep='\s+')
两种方法最终都会生成你需要的长格式DataFrame/CSV。如果原始数据中有更多Date-Qty对,方法一会自动识别所有同前缀列,方法二只需补充value_vars中的列名即可。
内容的提问来源于stack exchange,提问作者newbi
相关产品推荐
相关产品推荐

