将文件名设为列名合并光谱数据TXT文件时遇axis参数冲突问题
解决多吸光度数据文件合并的问题
你这段代码里的pd.concat调用明显写错了——pd.concat的参数结构是pd.concat(要合并的对象列表, axis=合并方向),你把一个字典作为第二个参数传进去,直接和axis参数冲突了。而且你已经提前把读取好的DataFrame放到to_concat列表里,后面又重复读取一次文件,完全是冗余操作。
下面是修正后的代码,能实现你要的“用文件名作为吸光度列标题,合并成单一文件”的需求:
import pandas as pd from pathlib import Path # 定义数据路径和输出路径 path = Path(r'C:\Users\Jake\Desktop\pythontest\data') output_path = Path(r'C:\Users\Jake\Desktop\pythontest\data\new\output.txt') # 初始化合并后的DataFrame merged_df = None for file in path.glob('*.txt'): # 读取文件:跳过前17行,指定制表符分隔,给列命名 df = pd.read_csv(file, skiprows=17, sep="\t", names=['波长', '吸光度']) if merged_df is None: # 处理第一个文件:保留波长列,把吸光度列改名为文件名(去掉.txt后缀) merged_df = df.rename(columns={'吸光度': file.stem}) else: # 处理后续文件:只取波长和吸光度列,改吸光度列名为文件名,按波长对齐合并 merged_df = merged_df.merge( df[['波长', '吸光度']].rename(columns={'吸光度': file.stem}), on='波长' ) # 输出合并后的文件:保留表头,不输出索引 merged_df.to_csv(output_path, sep='\t', index=False) print(merged_df.head())
关键说明
- 给每个读取的文件指定列名
['波长', '吸光度'],避免无列名导致的混乱 - 用
file.stem获取不带后缀的文件名,作为对应吸光度列的标题,后续软件打开能直接识别 - 通过
merge按波长列对齐合并,确保不同文件的同一波长数据对应到同一行(如果你的文件波长顺序/数值完全一致,也可以用下面更简洁的写法)
如果确认所有文件的波长列完全一致(顺序、数值都没差),可以用pd.concat简化代码:
import pandas as pd from pathlib import Path path = Path(r'C:\Users\Jake\Desktop\pythontest\data') output_path = Path(r'C:\Users\Jake\Desktop\pythontest\data\new\output.txt') absorbance_cols = [] wavelengths = None for file in path.glob('*.txt'): df = pd.read_csv(file, skiprows=17, sep="\t", names=['波长', '吸光度']) if wavelengths is None: wavelengths = df['波长'] # 提取吸光度列并改名为文件名 absorbance_cols.append(df['吸光度'].rename(file.stem)) # 合并波长列和所有吸光度列 merged_df = pd.concat([wavelengths] + absorbance_cols, axis=1) merged_df.to_csv(output_path, sep='\t', index=False) print(merged_df.head())
内容的提问来源于stack exchange,提问作者JakeyLG
相关产品推荐
相关产品推荐

