pandas从txt生成DataFrame列名后去除括号逗号表头变NaN如何解决
问题解决方案
问题根源
- 你从
feature_names.txt读取得到的features是单列DataFrame,其.values属性返回的是shape为(n, 1)的二维数组,将其直接赋值给dataset.columns后,每个列名本质是仅含单个字符串的类元组对象,不是纯字符串类型 - pandas的
str系列访问器仅支持处理字符串类型的索引元素,非字符串类型调用str.replace会直接返回NaN
修复方案
方案1:读取特征名时直接处理(推荐)
读取特征名时直接转为一维字符串列表,从根源避免列名格式异常:
import pandas as pd # squeeze参数自动把单列DataFrame转为一维Series,再转成列表 features = pd.read_csv("feature_names.txt", header=None).squeeze('columns').tolist() dataset = pd.read_csv("dataset.csv") dataset.columns = features
方案2:修正现有异常列名
如果已经完成数据集读取,不想重新跑加载逻辑,可以直接遍历处理现有列名:
# 提取每个列名的第一个元素,同时清理多余符号 dataset.columns = [col[0].strip('(), ') for col in dataset.columns]
如果需要保留字符串处理逻辑,可以先把列名转成字符串类型再操作:
dataset.columns = dataset.columns.astype(str).str.replace("[() ,]", "", regex=True)
内容的提问来源于stack exchange,提问作者Chris Drakeford
相关产品推荐
相关产品推荐

