如何合并含相同Coordinate Bins列的CSV文件以制作热力图并避免列重复?
解决多CSV合并时重复Coordinate Bins列的问题
你遇到的问题根源在于直接用pd.concat(axis=1)横向拼接时,每个CSV文件都自带Coordinate Bins列,导致最终输出里这个列重复了多次。要实现只保留一份Coordinate Bins列、同时合并所有时间区间Counts的需求,我们可以通过将Coordinate Bins设为索引后再拼接的方式解决,具体修改代码如下:
修改后的代码
import os import glob import pandas as pd def combine_to_master(coordmastername, csvdir): os.chdir(csvdir) ext = "csv" all_filenames = [i for i in glob.glob('*.{}'.format(ext))] # 先对文件名排序,确保时间区间的顺序正确(可选,根据你的文件名规则调整) all_filenames.sort() # 读取每个CSV,并将Coordinate Bins设为索引(避免拼接时重复列) df_list = [] for filename in all_filenames: df = pd.read_csv(filename) # 将Coordinate Bins设为索引,这样拼接时不会重复该列 df = df.set_index('Coordinate Bins') df_list.append(df) # 横向拼接所有DataFrame,索引一致的情况下会自动对齐 combined_df = pd.concat(df_list, axis=1, sort=True) # 把索引重新变回普通列,恢复你需要的结构 combined_df = combined_df.reset_index() # 保存合并后的文件 combined_df.to_csv(f"{coordmastername}.csv", index=False, encoding="utf-8")
代码说明
- 索引设置:将每个CSV的
Coordinate Bins设为索引后,横向拼接时只会保留这一份索引,不会重复生成列。 - 文件名排序:如果你的CSV文件名对应时间区间顺序(比如
time0.csv、time1.csv),排序后能保证合并后的Counts列按时间顺序排列,更适合后续热力图制作。 - 缺失值处理:如果某些CSV的
Coordinate Bins存在缺失区间,pd.concat会自动用NaN填充,你可以在拼接后添加combined_df = combined_df.fillna(0)将缺失值转为0,符合计数的逻辑。
合并后的预期输出
修改后生成的主CSV会是如下结构,完全满足你制作热力图/二维直方图的需求:
Coordinate Bins,Counts for time interval 0,Counts for time interval 1,Counts for time interval 2,... "(-10, -9]",0,0,0,... "(-9, -8]",0,0,0,... ...
内容的提问来源于stack exchange,提问作者prowill
相关产品推荐
相关产品推荐

