【Pandas学习】读、存excel数据
一、读数据
sep:默认以逗号分隔
header:是否包含表头
df = pd.read_csv(data.csv, sep= ,header=None, names=[var_code,var_name,var_desc])
二、将df存为excel
pandas.DataFrame.to_csv(path_or_buf= None, sep= ",", na_rep= "", float_format= None, columns= None, header= True, index= True, index_label= None, mode= "w", encoding= None, compression= "infer", quoting= None, quotechar= "", line_terminator= None, chunksize= None, date_format= None, doublequote= True, escapechar= None, decimal= ".")
是否加表头和行索引
index_A = df[df[0] == "<!AAA>"].index.tolist() df_A = df.iloc[index_A[0]+1:index_A[1], ] print(索引, index_A) print(df_A) df_A.to_csv(AAA.csv, header=False, index=False, encoding=utf-8-sig)
默认情况下保存文件会保存到和当前执行的文件相同的文件夹中
a=np.random.random(100) a=a.reshape(25,4) a=pd.DataFrame(a) a.to_csv(G:\0py\result\a.csv)
注意,路径一定要用双斜杠,用单斜杠会报错,原因未知
2、利用 import os 获取保存路径
import os #获取当前工作路径 import pandas as pd #将数据保存至相应文件中 file = os.getcwd() + \1.csv #保存文件位置,即当前工作路径下的csv文件 data = pd.DataFrame({a:[1, 2, 3], b: [4, 5, 6]}) #要保存的数据 data.to_csv(file, index=False) #数据写入,index=False表示不加索引
3、产生新的数据,添加至上述csv文件中已有数据的后面
#新数据,与data具有相同的和列与列名 data2 = pd.DataFrame({a:[7, 8, 9], b: [1, 2, 3]}) #保存至file文件中,index=False表示文件中不添加索引,header=False表示不添加列名,mode=a+表示在已有数据基础上添加新数据,并不覆盖已有数据 data2.to_csv(file, index=False, mode=a+, header=False)
4、多sheet,指定存入的sheet
直接用pd.to_excel()指定sheet_name时,即使指定sheet_name也没用,后一次的写入数据会覆盖前一次写入的数据,解决方法如下,借助pandas中的ExcelWriter方法;
1 # 方法1,推荐方法 2 with pd.ExcelWriter(test.xlsx) as writer: 3 data.to_excel(writer, sheet_name=data) 4 data2.to_excel(writer, sheet_name=data2) 5 6 # 写法2 7 writer = pd.ExcelWriter(test.xlsx) 8 data.to_excel(writer, sheet_name=data) 9 data.to_excel(writer, sheet_name=data2) 10 writer.save() 11 writer.close()
5、df.to_csv()出现中文乱码的解决办法
解决办法:只需在后面加上 encoding=utf_8_sig
df.to_csv(F:\test\688019.csv, index=False, encoding=utf_8_sig)
utf-8 和 utf_8_sig 的区别: ”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,因此它不需要BOM,所以当用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理。 "uft-8-sig"中sig全拼为 signature 也就是"带有签名的utf-8", 因此"utf-8-sig"读取带有BOM的"utf-8文件时"会把BOM单独处理,与文本内容隔离开。
上一篇:
通过多线程提高代码的执行效率例子