如何用Pandas排序并合并同目录下的多份单栏非规范DataFrame至单个CSV
批量合并并规整单列CSV文件方案
实现步骤
- 遍历目标目录下所有CSV文件
- 读取每个文件的单列数据,以文件名(去除后缀)作为列名
- 按索引对齐所有数据,空值自动填充
NaN - 对列、行分别排序
- 导出为最终规整CSV
代码实现
import pandas as pd import os # 替换为你的CSV文件所在目录路径 csv_directory = "./csv_files" merged_result = pd.DataFrame() # 遍历处理每个CSV文件 for file_name in os.listdir(csv_directory): if file_name.endswith(".csv"): full_path = os.path.join(csv_directory, file_name) try: # 读取单列数据,设置列名为文件名(去掉.csv后缀) single_col_df = pd.read_csv(full_path, header=None, names=[file_name[:-4]]) # 横向合并数据,自动对齐行索引 merged_result = pd.concat([merged_result, single_col_df], axis=1) except Exception as err: print(f"处理 {file_name} 失败: {err}") # 按列名排序 merged_result = merged_result.sort_index(axis=1) # 按行索引排序(若需按值排序,替换为 merged_result.sort_values(by="目标列名")) merged_result = merged_result.sort_index(axis=0) # 导出结果,不保留行索引,编码适配中文 merged_result.to_csv("./final_merged.csv", index=False, encoding="utf-8-sig")
自定义调整说明
- 列命名规则:如果不需要用文件名作为列名,修改
names=[file_name[:-4]]为自定义列名即可 - 行排序规则:若要按某列的值排序,将行排序代码改为
merged_result.sort_values(by="你要排序的列名", ascending=True)(ascending=False为降序) - 文件过滤:如果只想处理特定前缀/后缀的文件,修改
if file_name.endswith(".csv")为更精准的判断,比如if file_name.startswith("data_") and file_name.endswith(".csv") - 编码适配:若导出CSV出现乱码,可将
encoding="utf-8-sig"改为"gbk"或其他对应编码
内容的提问来源于stack exchange,提问作者tara1368
相关产品推荐
相关产品推荐

