Python Pandas 读取文件报错:常见原因及解决方法
这段代码报错的原因很可能是文件路径错误或文件不存在导致无法读取数据文件。
import pandas as pd
import matplotlib.pyplot as plt
pd.set_option('display.unicode.east_asian_width', True)
pd.set_option('display.width', None)
plt.rcParams['font.sans-serif'] = 'simhei'
plt.rcParams['font.size'] = 15
data1 = pd.read_csv('e:/pydata/supermarket.csv')
data2 = pd.read_csv('e:/pydata/region.txt', sep='\t')
data3 = pd.read_excel('e:/pydata/category.xlsx', sheet_name='Sheet1')
data = pd.merge(data1, data2, how='outer', on='省')
data = pd.merge(data, data3, how='outer', on='子类别')
print('数据的行数= %d\n数据的列数= %d' % (data.shape[0], data.shape[1]))
print('数据的前5行为: \n', data.head())
print(data['利润率'].head(3))
data['利润率'] = data['利润率'].apply(lambda x: x.replace('%', ''))
data['利润率'] = data['利润率'].astype('float') / 100
print(data['利润率'].head(3))
data = data.drop_duplicates(subset=['订单ID', '产品ID', '客户ITD'], keep='first')
print('去重后的行数=', data.shape[0])
print(data[['发货日期', '订单日期']].dtypes)
data['发货日期'] = pd.to_datetime(data['发货日期'])
data['订单日期'] = pd.to_datetime(data['订单日期'])
print(data[['发货日期', '订单日期']].dtypes)
data['年'] = data['订单日期'].dt.year
data['月'] = data['订单日期'].dt.month
print(data[['订单日期', '年', '月']][:5])
group_result1 = data.groupby(by='产品名称')['销售额'].sum()
group_result1 = group_result1.sort_values(ascending=False)
print('销售金额排名的前5的产品:\n', group_result1.head())
group_result2 = data.groupby(by='年')['利润'].sum()
print('每年的利润为: \n', group_result2)
loc_result = data.loc[(data['年'] == 2016) & (data['地区'] == '中南') & (data['类别'] == '办公用品')]
mean = loc_result['利润'].sum() / 12
mean = round(mean, 2)
print('2016年中南地区办公用品的平均每月利润为: ', mean)
years = group_result2.index
values = group_result2
n = len(values)
hb_lists = []
for i in range(n):
if i == 0:
hb = 0
else:
hb = (values.iloc[i] - values.iloc[i - 1]) / values.iloc[i - 1]
print('%d年的环比=%.2f%%' % (years[i], hb * 100))
import numpy as np
tab1 = pd.crosstab(index=data['子类别'], columns=data['地区'])
print('不同地区的不同类别的订单频数\n', tab1)
tab2 = pd.pivot_table(data, index='子类别', columns='地区', values='销售额', aggfunc=np.mean)
tab2 = round(tab2, 0)
print('不同地区的不同类别的销售额平均值\n', tab2)
plt.rcParams['figure.figsize'] = (8, 6)
result1 = data.groupby(by='地区')['销售额'].mean()
result1_mean = data['销售额'].mean()
y = result1.index
width = result1
height = 0.3
plt.barh(y, width, height)
plt.title('不同类别的平均销售额')
plt.axvline(result1_mean, color='r', linestyle=':')
plt.show()
plt.rcParams['figure.figsize'] = (10, 8)
fig, axes = plt.subplots(3, 1)
ax = axes.ravel()
y = ['销售额', '利润', '利润率']
names = ['平均销售额', '平均利润', '平均利润率']
for i, j, k in zip(range(3), y, names):
result2 = data.groupby(by='月')[j].mean()
x = result2.index
y = result2
ax[i].bar(x, y, color='skyblue')
ax[i].plot(x, y, color='brown', linestyle='--')
ax[i].set_ylabel(k)
ax[i].set_xticks(np.arange(1, 13))
plt.show()
result3 = data.groupby(by='邮寄方式')['利润'].sum()
c = ['darkorange', 'yellowgreen', 'skyblue', 'lightyellow']
patches, text1, text2 = plt.pie(x=result3, labels=result3.index, autopct='%.1f%%', colors=c, radius=1)
for i in text1:
i.set_size(20)
i.set_color('red')
for i in text2:
i.set_size(16)
i.set_color('darkgreen')
plt.pie(x=[1], colors='w', radius=0.6)
plt.title('不同邮政方式的利润和', color='b')
plt.show()
1. 检查文件路径
- 确保文件路径正确,包括大小写、路径分隔符(Windows 使用 '',Linux/Mac 使用 '/')。
- 可以尝试将文件路径直接复制到文件浏览器中,查看文件是否存在。
- 还可以使用
os.path.exists()函数检查文件是否存在:
import os
if os.path.exists('e:/pydata/supermarket.csv'):
# 文件存在
else:
# 文件不存在
2. 检查文件名
- 确保文件名拼写正确,包括大小写。
3. 检查文件格式
- 确保文件格式与读取函数匹配:
pd.read_csv()用于读取 CSV 文件pd.read_excel()用于读取 Excel 文件pd.read_table()用于读取以制表符分隔的文本文件
4. 检查文件编码
- 如果文件编码错误,可能会导致读取失败。尝试使用
encoding参数指定文件编码:
data = pd.read_csv('e:/pydata/supermarket.csv', encoding='gbk') # 例如指定 GBK 编码
5. 其他错误
- 如果仍然无法解决问题,可以尝试以下步骤:
- 检查文件是否被其他程序占用。
- 尝试重新保存文件,确保文件完整。
- 检查代码中是否有其他错误。
解决方法
- 修正文件路径或文件名拼写错误
- 确保文件格式与读取函数匹配
- 使用
encoding参数指定文件编码 - 检查其他可能的错误,如文件被占用、文件损坏等。
建议
- 在代码中使用相对路径,可以避免因文件路径更改导致错误。
- 使用
try...except块处理文件读取错误,可以避免程序崩溃。
try:
data = pd.read_csv('e:/pydata/supermarket.csv')
except FileNotFoundError:
print('文件不存在')
希望这些信息能帮助你解决代码报错问题!
原文地址: https://www.cveoy.top/t/topic/pj1l 著作权归作者所有。请勿转载和采集!