熊猫(Python)中未正确指定列
我在一个.csv文件中有一个数据集,我正试图提取它并命名它的列。我使用以下代码:熊猫(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
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+”放入@福格瑞特