Python pandas设置DataFrame列名后数据全为NaN如何解决
问题原因
你执行pd.DataFrame(x, columns=[新列名列表])的逻辑存在问题:当你传入已有DataFrame作为数据源构造新DataFrame时,columns参数的作用是从数据源中筛选出指定名称的列,而非直接修改列名。
你删完列得到的x的列名还是读取csv时的原始列名(也就是你之前删列用到的'2'、'7'这类数字字符串),找不到你指定的TimeStamp等新列名,pandas就会自动把这些列的值全部填充为NaN。
正确实现代码
直接修改x的columns属性即可完成重命名,不需要重新构造DataFrame:
import pandas as pd df = pd.read_csv('testData.csv') # 删除无用列 x = df.drop(columns=['2','3','7','8','9','10','11']) # 直接为剩余列设置新列名 x.columns = ['TimeStamp','OpenTemp','CloseTemp','MeanTemp','EndTimeStamp'] # 写入新csv文件,index=False表示不导出pandas自带的行索引 x.to_csv('processed_data.csv', index=False)
如果你的原始csv文件本身没有表头,第一行就是数据,还可以在读取阶段就调整逻辑:
import pandas as pd # header=None表示原始csv没有表头,第一行就是数据 df = pd.read_csv('testData.csv', header=None) # 此时列名是从0开始的数字索引,直接传数字删列即可 x = df.drop(columns=[2,3,7,8,9,10,11]) x.columns = ['TimeStamp','OpenTemp','CloseTemp','MeanTemp','EndTimeStamp'] x.to_csv('processed_data.csv', index=False)
内容的提问来源于stack exchange,提问作者Kevin Le Gall
相关产品推荐
相关产品推荐

