pandas模块-pandas读取与写入文件
导入模块:
import numpy as npimport pandas as pdfrom pandas import Series,DataFramefrom numpy import nan as NA# matplotlib做图模块import matplotlib.pyplot as plt# 处理中文正常显示plt.rcParams[\'font.sans-serif\'] = [\'Microsoft YaHei\']
这里是下面会用到的csv素材(e…实在不知道怎么往博客里导入csv文件,就在这里放截图吧)
ex1.csv
ex2.csv
ex3.csv
ex4.csv
ex5.csv
csv_mindex.csv
1.读取CSV
pd.read_csv( ) 默认 逗号为分隔符,默认 首行作为 columnsName
pd.read_csv(\'data/ex1.csv\')
pd.read_table() 也可以读取,但是要指定分隔符参数sep=’ \’
pd.read_table(\'data/ex1.csv\',sep=\',\')
读取没有明显列名称的文件,不需要让首行作为列,用参数 header=None
pd.read_csv(\'data/ex2.csv\',header=None)
自定义列名称 ,参数 names=[ ],names 给几列,就会从最后向前读几列数据,剩下的都是 index,超出列就是 nan
pd.read_csv(\'data/ex2.csv\',names=[\'aa\',\'bb\',\'cc\',\'dd\',\'message\',\'ee\'])
设置 行索引 index_col = \’某个列name’
pd.read_csv(\'data/ex2.csv\',names=[\'aa\',\'bb\',\'cc\',\'dd\',\'message\']),index_col=\'message\'
多列作为行索引
pd.read_csv(\'data/csv_mindex.csv\',index_col=[\'key1\',\'key2\'])
读取 使用不规则的分隔符的 数据 ,使用 sep= ’ ’ ,使用正则表达式作为分隔符 ,不需要导入 re 模块。直接写正则字符串
pd.read_csv(\'data/ex3.txt\',sep=\'\\s+\')
使用 skiprows = [] 跳过一些行
pd.read_csv(\'data/ex4.csv\',skiprows=[0,2,3])
comment=’#’ 指定 # 开头的是注释,不用读取
pd.read_csv(\'data/ex4.csv\',comment=\'#\')
在读取的所有列中需要让xxx值变为nan,使用参数 na_values=[ ] ,空值 与 NA 字符默认为NaN
pd.read_csv(\'data/ex5.csv\',na_values=[1,2,\'two\'])
在读取的指定列中需要让xxx值变为nan,用字典来匹配 ,某个列的一个值或多个值
# 先创建一个字典nans = {\'something\':\'two\' ,\'message\':[\'foo\',\'world\']}pd.read_csv(\'data/ex5.csv\' ,na_values=nans)
2.写入CSV
创建一个DataFrame,模拟一个成绩表,各科成绩有重复。
names = \'尺,寸,人,下,匕,卜,之,田,丫,乃,贝,井,工,几,女,巨,爪,火,了,方,木,中,寸,石,户,友,夫,不,可,主,又,丑,巾,口,电,门,术,儿,羊,丁,心,天,化,气,正,页,兄,伏,大,计\'.split(\',\')df10 = DataFrame({\'语文\':np.random.randint(60,100,50),\'数学\':np.random.randint(60,100,50),\'英语\':np.random.randint(60,100,50),\'化学\':np.random.randint(60,100,50),\'物理\':np.random.randint(60,100,50),\'生物\':np.random.randint(60,100,50),\'政治\':np.random.randint(60,100,50),\'历史\':np.random.randint(60,100,50),\'地理\':np.random.randint(60,100,50),},index = [np.random.choice(list(\'赵钱孙李周吴郑王\'))+names.pop(np.random.randint(0,len(names))) for i in range(50)])df10
保存 , 默认行列索引都存进去
df10.to_csv(\'成绩.csv\',encoding=\'utf-8\')
index = False:不要行索引
df10.to_csv(\'成绩1.csv\' ,index=False)
header = False :不要列索引
df10.to_csv(\'成绩2.csv\' ,header=False)
na_rep = ‘xx’ 将 nan 换成xx进行存储,默认是 空
df10.to_csv(\'成绩3.csv\',na_rep=\'空\')
预览存储效果:sys.stdout
导入模块:
import sys
以竖线为分隔符的预览效果
df10.to_csv(sys.stdout,sep=\'|\',na_rep=\'空空如也\')
3.EXCEL的存储和读取
存储,前提需要先安装 openpyxl模块,不需要导入
data.to_excel(\'成绩.xlsx\')
# startrow=1,从第一行开始写(下标为1的行)data.to_excel(\'成绩1.xlsx\',startrow=1 ,encoding=\'utf-8\')
读取excel ,参数同 读取 csv的参数 ,多了个 sheet_name表名,需要安装xlrd模块,不需要导入
pd.read_excel(\'成绩.xlsx\')