CSV 导入问题
关于csv导入的时候不能用UTF-8 等格式
需要用encoding=‘unicode_escape’
就不会出现编码错误
import pandas as pd
import csv
# 文件调用函数
def file():
try:
w_file = input("请输入输入文件的位置")
f=open(w_file,"rb+")
except:
print("输入文件位置有错,没有次文件")
try:
to_file = input("请输入输出文件的位置")
f=open(w_file,"rb+")
except:
print("输入文件位置有错,没有次文件")
return w_file,to_file
def one():
w_file,to_file=file()
data1 = pd.read_csv(w_file, encoding='unicode_escape')
data2 = data1.loc[0:4]
data3 = data1.loc[-2:-1]
data2.isnull()
data2.dropna(axis='columns', how='all', inplace=True)
data2.dropna(axis='index', how='all', inplace=True)
data3.isnull()
data3.dropna(axis='columns', how='all', inplace=True)
data3.dropna(axis='index', how='all', inplace=True)
print(data2)
print(data3)
def two():
w_file, to_file = file()
print(w_file,to_file)
data = pd.read_csv(w_file,encoding='unicode_escape')
k = len(data)
# 构建需要写的标题为列表
list1 = ['Region', 'Country', 'City/station', 'PM 2.5', 'PM2.5 Year']
f = open(to_file,'w',encoding="UTF-8")
# 写入标题
for i in range(0,5):
f.write(list1[i]+" ")
f.write("\n")
# 写入内容
for i in range(0,k):
for j in list1:
s=data[j][i]
f.write(str(s)+" ")
f.write(" ")
f.write("\n")
print("文件写入成功")
def three():
w_file, to_file = file()
try:
csvFile = open('5.csv','w',newline='',encoding='unicode_escape')
# 构建容器
writer = csv.writer(csvFile)
csvRow = []
f = open("3.txt",'r',encoding='UTF-8')
tag=0
for line in f:
# 按空格分隔
csvRow = line.split(" ")
writer.writerow(csvRow)
f.close()
csvFile.close()
except:
data = pd.read_csv(w_file, encoding='UTF-8')
list1 = ['Region', 'Country', 'City/station', 'PM 2.5', 'PM2.5 Year']
# 排序
# 这里放“UTF-8 就会出现错误”
data = data[list1].sort_values(by='PM 2.5', ascending=False)
data.to_csv(to_file)
print("排序完成")
def four():
w_file,to_file=file()
data=pd.read_csv(w_file,encoding='unicode_escape')
data1=data['PM 2.5']
a=[]
for i in data1:
i=float(i)
a=a+[i]
bins = [0,50,100,150200]
result=pd.cut(a,bins)
print(pd.value_counts(result))
# 直方图
pd.cut(data1,bins, labels = ['One', 'Two', 'Three']).value_counts().plot.bar()
plt.savefig('world_pm25_hist.png')
plt.show()
# 饼状图
pd.cut(data1,bins, labels = ['One', 'Two', 'Three']).value_counts().plot.pie()
plt.savefig("world_pm25_pie.png")
plt.show()
if __name__ == '__main__':
a = input('请输入指令1,2,3,4')
if a == '1':
one()
print('执行成功')
elif a == '2':
two()
print('执行成功')
elif a == '3':
three()
print('执行成功')
elif a == '4':
four()
print('执行成功')
else:
print('输入错误,请重新输入')