熊猫(Python)中未正确指定列

熊猫(Python)中未正确指定列,python,pandas,dataframe,Python,Pandas,Dataframe,我在一个.csv文件中有一个数据集,我正试图提取它并命名它的列。我使用以下代码: data_name = 'housing.csv' column_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'LSTAT', 'MEDV'] d

我在一个.csv文件中有一个数据集,我正试图提取它并命名它的列。我使用以下代码:

data_name = 'housing.csv'
column_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX',
                                 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO',
                                 'LSTAT', 'MEDV']
data = pd.read_csv(data_name, names=column_names, error_bad_lines=False,
                   header=None)
问题是它将标题分配给了错误的列。只有最后一列被重命名,其他列被添加,并用NaN值填充。我也尝试过使用
重命名
,结果类似。下面是打印(data.head())的样子:

                                                CRIM  ZN  ...  LSTAT  MEDV
0   0.00632  18.00   2.310  0  0.5380  6.5750  65... NaN  ...    NaN   NaN
1   0.02731   0.00   7.070  0  0.4690  6.4210  78... NaN  ...    NaN   NaN
2   0.02729   0.00   7.070  0  0.4690  7.1850  61... NaN  ...    NaN   NaN
3   0.03237   0.00   2.180  0  0.4580  6.9980  45... NaN  ...    NaN   NaN
4   0.06905   0.00   2.180  0  0.4580  7.1470  54... NaN  ...    NaN   NaN

你知道如何解决这个问题吗?

看起来你的文本数据是用空格而不是逗号分隔的

您可以尝试显式告诉
read\u csv
使用一个或多个空格作为字段分隔符:

data = pd.read_csv(data_name, names=column_names, error_bad_lines=False,
                   header=None, sep='\s+')
read\u csv
中还有一个显式的
delim\u whitespace
选项,其作用与上述相同。从:

delim_空白:bool,默认为False

指定是否将空格(例如
'
'
)用作sep。相当于设置
sep='\s+'
。如果此选项设置为True,则不应为
分隔符
参数传入任何内容


是否需要将分隔符指定为原始字符串(
r'\s+'
)@foglerit@Todd:好问题。我只是在使用和不使用原始字符串的情况下进行了测试,没有发现行为上的差异。你的行为不同吗?是的。我确实注意到这是不同的。如果没有
r
,Python interp将反斜杠视为转义。对于
r
,它将其视为有效的正则表达式语句。我这里有一个使用相同表达式的示例,您可以尝试使用read_csv()将我在其中显示的文本转换为一个数据帧,其中包含或不包含“r”。是的,我知道python如何解释字符串和原始字符串中的反斜杠。我的意思是,如果你看到在
read\u csv
中使用或不使用它有什么区别。我只是在没有
r
的情况下在你的链接中运行了这个示例,它成功了。另外,
read\u csv
文档建议使用
sep='\s+'
,而不是
sep=r'\s+'
:--选中选项
delim\u whitespace
。无论“它是否有效”,\s+'都是错误的正则表达式。您需要字符串前面的“r”来告诉interp将反斜杠视为普通字符。或者,您也可以将“\\s+”放入@福格瑞特