You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Jupyter Notebook与IDLE中pandas的sep='\s+'无法生效问题及解决

解决办法

问题根源是Python字符串的转义机制,\s在普通字符串中属于无效转义序列,触发了SyntaxWarning。要让pandas正确识别空白分隔符,有两种正确写法:

  • 使用原始字符串:sep=r'\s+'(推荐,写法更简洁)
  • 转义反斜杠:sep='\\s+'

原因解释

在Python普通字符串中,\是转义字符,比如\n代表换行、\t代表制表符,但\s并不是合法的转义序列,所以Python会抛出警告。而pandas的sep参数需要的是正则表达式中的\s+(匹配1个或多个空白字符),因此必须让Python将\s原封不动地传递给正则引擎——原始字符串(前缀r)会自动忽略转义规则,手动把反斜杠转义为\\也能达到同样效果。

修正后的完整代码

import pandas as pd
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsRegressor

url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
# 使用原始字符串写法处理分隔符
dataframe = pd.read_csv(url, sep=r'\s+', names=names)
array = dataframe.values
X = array[:,0:13]
Y = array[:,13]
kfold = KFold(n_splits=10, random_state=7, shuffle=True)
model = KNeighborsRegressor()
scoring = 'neg_mean_squared_error'
results = cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print(results.mean())

参考pandas文档说明

delim_whitespace : boolean, default False

Specifies whether or not whitespace (e.g. ' ' or '    ') will be used as the sep. 
Equivalent to setting sep='\s+'. If this option is set to True, nothing should be 
passed in for the delimiter parameter.

文档里提到delim_whitespace=True等价于sep='\s+',但这里的\s+是正则表达式语法,在Python中必须处理转义才能正确使用。

内容的提问来源于stack exchange,提问作者No Time

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:10:07