Pandas中read_csv读取的有效数据转为DataFrame后全为NaN的原因?
问题:Pandas读取TXT文件后新建DataFrame全为NaN
我用Pandas读取多个TXT文件做数据处理,TXT样本内容如下:
0000000000000e+000,0.05844309,0.05078511 5000000000000e-001,0.05802771,0.01336614 0000000000000e-001,0.1123048,0.008524402 5000000000000e-001,0.1359783,0.005294179 0000000000000e+000,0.1028109,0.004224583 2500000000000e+000,0.1182408,0.005825941
(实际文件无空行)
我的代码如下:
os.chdir(ProcessedDataPath) #Path to the overall folder PandasFilePath = 'Run_Data00001.txt' #this being the data file I'm reading Data_RAW = pd.read_csv(PandasFilePath, header = None) Data_RAW = Data_RAW.astype(float) Data_Frame = pd.DataFrame(Data_RAW,columns=["Hz", "N", "m/s2"])
代码执行无报错,列名显示正确,但Data_Frame里所有值都是NaN,而Data_RAW的数据是正常的(已通过Anaconda变量查看器确认数据类型和内容)。试过移除NaN、修改数据类型,都没法让数据正常载入Data_Frame。
解决方法
错误原因
你创建Data_Frame的写法逻辑有误:当使用pd.DataFrame(Data_RAW, columns=["Hz", "N", "m/s2"])时,Pandas会尝试从Data_RAW中匹配同名列,但Data_RAW的列是默认的0、1、2,和你指定的新列名不匹配,因此生成全NaN的结果。
修正方案
方案1:直接重命名原DataFrame的列
不需要新建DataFrame,直接给Data_RAW重命名列即可:
os.chdir(ProcessedDataPath) PandasFilePath = 'Run_Data00001.txt' Data_RAW = pd.read_csv(PandasFilePath, header = None) Data_RAW = Data_RAW.astype(float) # 映射原列索引到新列名 Data_Frame = Data_RAW.rename(columns={0: "Hz", 1: "N", 2: "m/s2"})
方案2:读取文件时直接指定列名(一步到位)
读取CSV时直接设置列名和数据类型,省去后续转换步骤:
os.chdir(ProcessedDataPath) PandasFilePath = 'Run_Data00001.txt' # 读取时指定列名+数据类型 Data_Frame = pd.read_csv(PandasFilePath, header=None, names=["Hz", "N", "m/s2"], dtype=float)
批量处理多个TXT文件的优化写法
如果你需要处理文件夹下多个TXT文件,可以用循环批量读取并合并:
import os import pandas as pd ProcessedDataPath = "你的目标文件夹路径" os.chdir(ProcessedDataPath) # 筛选出所有TXT文件 txt_files = [f for f in os.listdir() if f.lower().endswith('.txt')] # 批量读取并合并 all_datasets = [] for file_name in txt_files: df = pd.read_csv(file_name, header=None, names=["Hz", "N", "m/s2"], dtype=float) # 添加文件名列,方便后续溯源数据来源 df["source_file"] = file_name all_datasets.append(df) # 合并成一个大DataFrame final_data = pd.concat(all_datasets, ignore_index=True)
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

