Python Seaborn加载本地数据报错:文件不存在及HTTP协议错误
问题根源:误解了
sns.load_dataset()的作用 你这里犯了一个关键错误——sns.load_dataset()根本不是用来加载本地CSV文件或已读取的DataFrame的。这个函数的设计目的是加载Seaborn官方内置的公开数据集(比如tips、iris这类),它的参数是数据集的名称字符串,而不是你已经用pandas读取好的DataFrame对象。
为什么你的代码会报错?
- 当你执行
nyctel = sns.load_dataset(tel)时,函数会把传入的tel(一个DataFrame对象)自动转换成字符串,然后尝试去Seaborn默认的数据集存储路径找名为"nyc.csv"的内置数据集——显然这个数据集不存在,所以抛出IOError: File nyc.csv does not exist。 - 当你改用绝对路径时,
load_dataset会把这个路径字符串当成数据集名称,尝试通过HTTP请求去获取(因为它默认从远程仓库拉取内置数据集),自然会触发HTTP协议错误。
修正后的正确代码
你已经用pd.read_csv成功读取了本地的nyc.csv到tel这个DataFrame里,直接用这个DataFrame绘图就行,完全不需要调用sns.load_dataset:
import os.path directory = os.path.dirname(os.path.abspath(__file__)) import pandas as pd import seaborn as sns sns.set(style="whitegrid", color_codes=True) # 用绝对路径读取本地CSV,避免相对路径问题 tel = pd.read_csv(os.path.join(directory, 'nyc.csv')) # 直接使用读取好的tel DataFrame绘图 sns.stripplot(x="installation_id", y="mounting", hue="mounting", data=tel)
补充说明
如果之后你需要使用Seaborn的内置数据集,才需要用到load_dataset,比如:
# 加载Seaborn内置的tips数据集 tips = sns.load_dataset("tips") sns.stripplot(x="day", y="total_bill", data=tips)
内容的提问来源于stack exchange,提问作者InterLinked
相关产品推荐
相关产品推荐

