循环读取单列txt文件追加到DataFrame后首列外均为NaN问题求助
问题根因
你的代码问题出在append方法的使用逻辑上:append是按行纵向拼接DataFrame的接口,你每次读入的单列DataFrame仅包含对应文件名的列,和已有的结果DataFrame做列对齐时,其他不存在的列会自动填充NaN,因此会出现只有第一列有值、其他列全为NaN的问题。另外pandas 2.0及以上版本已经完全废弃append方法,更推荐使用concat实现拼接需求。
解决方案
改用concat按列横向拼接即可实现「每个txt作为单独一列存入同一个DataFrame」的需求,修改后的代码如下:
- 先将所有读入的单列DataFrame存入列表
import os import pandas as pd dataPath = os.path.join(os.getcwd(), Project) df_list = [] for filename in os.listdir(dataPath): if filename.endswith(".txt"): columnName = os.path.basename(filename) df = pd.read_csv( os.path.join(dataPath, filename), index_col=None, header=0, names=[columnName], dtype=float ) df_list.append(df)
- 按列拼接所有DataFrame
# axis=1 代表按列横向拼接,自动对齐行索引 data = pd.concat(df_list, axis=1)
注意事项
如果不同txt文件的行数不一致,行数更少的列末尾会自动填充NaN;如果你的业务要求所有txt行数必须一致,可以在拼接前添加校验逻辑判断每个df的行数是否相同。
不需要使用merge接口,merge是用来做表关联匹配的,你的场景属于简单的多表横向拼接,concat完全可以满足需求。
内容的提问来源于stack exchange,提问作者German Barcenas
相关产品推荐
相关产品推荐

