读取csv文件
- pd.read_csv(‘data/data.csv’) # 注意目录层级
- pd.read_csv(‘data.csv’) # 文件与代码在同一目录
- pd.read_csv(‘data/my/my.data’) # csv文件的扩展名称不一定是.csv
- pd.read_csv(‘/user/data/data.csv’) # 本地绝对路径
- pd.read_csv(‘https://www.acb.com/files/data/GDP-China.csv’) # 使用URL
- 字符串
from io import StringIO
data=('col1,col2,col3\n'
'a,b,1\n'
'a,b,2')
pd.read_csv(StringIO(data))
pd.read_csv(StringIO(data),dtype =object)
- pd.read_csv(‘sss.csv’,encoding=‘utf8’) # 指定编码
- pa.read_csv(data,thousands=‘,’) # 指定千分为分隔符
分隔符
- pd.read_csv(data,sep=‘\t’) # 制表符分隔tab
- pd.read_table(data) # read_table 默认是指标分隔tab
- pd.read_csv(data,sep=‘|’) # '|'分隔符
- pd.read_csv(data,sep=‘(?<!a>|(?!1))’,engine=‘python’) # 使用正则
表头
- pd.read_csv(data,header=0) # 第一行(数据第一行,不是文件的第一行)
- pd.read_csv(data,header=None) # 忽略头,全部做为为数据
列名
- pd.read_csv(data,names=[‘列1’,‘列2’]) # 指定列名,代替文件的第一行
- pd.read_csv(data,names=[‘列1’,‘列2’],header = None) # 指定列名,全部做为为数据
索引
- pd.read_csv(data,index_col=False) # 不在使用首列作为索引
- pd.read_csv(data,index_col=0) # 指定第一列为索引
- pd.read_csv(data,index_col=‘年份’) # 指定第列名
- pd.read_csv(data,index_col=[‘a’,‘b’]) # 层级索引
- pd.read_csv(data,index_col=[0,3]) # 层级索引
使用部分列
- pd.read_csv(data,usecols=[0,4,3]) # 按索引只读取指定列,与顺序无关
- pd.read_csv(data,usecols=[‘列1’,‘列5’]) # 按列名,列名必须存在
表头前缀
- pd.read(data,prefix=‘_c’,header=None) # 表头默认加上_c前缀
处理重复列名
- pd.read(data,mangle_dupe_cols = True) # 设置为true时,列名变为X,X.1,…,X.N;如果为false,当列名中存在重复时会报ValueError
数据类型
- pd.read_csv(data,dtype=np.float(64)) # 所有数据均为此类型
- pd.read_csv(data,dtype={‘c1’:np.float64,‘c2’:str}) # 指定字段的类型
- pd.read_csv(data,dtype=[datetime,datetime,str,float]) # 依次指定
真假值转换
- pd.read_csv(data,true_values=[‘Yes’,‘ok’],false_valuse=[‘No’]) # 将yes,ok转为True,no转为false
行操作
- pd.read_csv(data,skiprows=2) # 跳过前三行
- pd.read_csv(data,skiprows=range(2)) # 跳过前三行
- pd.read_csv(data,skiprows=[24,234,141]) # 跳过指定行
- pd.read_csv(data,skiprows=np.array([2,6,11])) # 跳过指定行
- pd.read_csv(data,skiprows = lambda x:x%2!=0) # 隔行跳过
- pd.read_csv(data,skipfooter = 1) # 不加载最后一行
- pd.read_csv(data,nrows=1000) # 读取前1000行
空值替换
- pd.read_csv(data,na_values=[5]) # 5,5.0被认为NaN
- pd.read_csv(data,na_values=‘?’) # ?被认为NaN
- pd.read_csv(data,keep_default_na = False,na_values=[‘’]) # 空值为NaN
- pd.read_csv(data,keep_default_na = False,na_values=[‘NA’,‘0’]) # 字符NA,0为NaN
日期解析
时间解析库:默认dateutil.parser,parser
date_parser = pd.io.date_converts.parse_date_time
date_parser = lambda x: pd.todatetime(x,utc=True,format=‘%d%b%Y’)
date_parser = lambda d: pd.datetime.strotime(d,‘%d%b%Y’)
- pd.read_csv(data,parse_dates=[‘年份’],date_parser=date_parser) # 指定列和解析方式
- pd.read_csv(data,parse_dates = True) # 自动解析日期
- pd.read_csv(data,parse_dates =[‘年份’]) # 指定日期字段进行解析
- pd.read_csv(data,parse_dates={‘时间’:[1,4]})
- pd.read_csv(data,parse_dates =[‘年份’],inter_datetime_format=True) # 如果datetime字符串格式都相同,inter_datetime_format=True将提高解析速度
读取Excel文件
-
pd.read_excel(“data/data.xlsx”) # 相对路径 默认读取第一个sheet
-
pd.read_excel(“data.xlsx”) # 文件与代码在同一目录下
-
pd.read_excel(“/user/gairuo/data/data.xlsx”) # 绝对路径
-
pd.read_excel(‘https://www.acb.com/files/data/GDP-China.xlsx’)
表格
- pd.read_excel(‘tmp.xlsx’,sheet_name=1) # 读取第二个sheet
- pd.read_excel(‘tmp.xlsx’,sheet_name=‘总表’) # 安装sheet名称读取
- dfs = pd.read_excel(‘tmp.xlsx’,sheet_name=[0,1,‘sheet5’]) # 读取第一、五,名称为sheet5的sheet,返回一个df字典;dfs[‘sheet5’]获取sheet5的数据
- dfs = pd.read_excel(‘tmp.xlsx’,sheet_name=None) # 所有sheet
表头
- pd.read_excel(‘tmp.xlsx’,header=None) # 不设表头
- pd.read_excel(‘tmp.xlsx’,header=2) # 设置第三行为表头
- pd.read_excel(‘tmp.xlsx’,header=[0,1]) # 两层表头,多层索引
列名
- pd.read_excel(‘tmp.xlsx’,names=[‘姓名’,‘年龄’,‘成绩’]) # names 指定列名
- pd.read_excel(‘tmp.xlsx’,names=c_list) # 传入列表参数
- pd.read_excel(‘tmp.xlsx’,header=None,names=None) # 没有表头需要设置为None
数据输出
导出csv
-
df.to_csv(“done.csv”) # 导数据到同级目录
-
df.to_csv(“data/done.csv”) # 可以指定文件目录
-
df.to_csv(“done.csv”,index=False) # 不要设置索引
-
df.to_csv(‘out.zip’,index = False,compression = {‘method’:‘zip’,‘archive_name’=‘out.csv’})
导出excel
-
df.to_excel(‘path_to_file.xlsx’) # 导出,指定文件名
-
df.to_excel(‘path_to_file.xlsx’,sheet_name=‘Sheet1’,index=False) # 指定sheet名,不要索引
-
df.to_excel(‘path_to_file.xlsx’,index_label=‘label’,merge_cells=False) # 指定索引,不合并单元格
-
多个df分不同sheet导入到一个excel文件中
with pd.ExcelWriter('path_to_file.xlsx') as writer: df1.to_excel(writer,sheet_name='sheet1') df2.to_excel(writer,sheet_name='sheet2')
-
df.to_excel(‘path_to_file.xlsx’,sheet_name=‘Sheet1’,engine=‘xlsxwriter’)
html
- print(df.to_html()) # df.to_html() 只有表格部分(html片段)
- df.to_html(‘D:\ss.html’) # 保存到文件
- print(df.to_html(columns=[0])) # 输出指定列
- print(df.to_html(bold_rows=False)) # 表头不加粗
- print(df.to_html(classes=[‘class1’,‘class2’])) # 表格指定样式,支持多个
- dfs = pd.read_html(url) # 读取html中的table,url可以是网络资源,也可以是本地html文件 ;返回一个列表
- df_1 = pd.read_html(url,attrs={‘id’:‘table’}) # 读取id=‘table’的表格
- dfs = pd.read_html(url,attrs={‘calss’:‘table’}) # 读取class=‘table’的表格
JSON
-
data = pd.read_json(‘…/examples/example.json’) # 读取json数据
-
data = pd.read_json(‘json 字符串’) # 读取json字符串
-
data.to_json(‘…/examples/example.json’) # 保存数据到josn文件
数据库(SQL)
-
创建数据库引擎
from sqlalchemy import create_engine engine = create_engine('sqlite:///:memory:')
-
data = pd.read_sql_table(‘data’,engine) # 读取data表
-
df_data.to_sql(‘data’,engine) # 将df_data的数据写入到data表
-
pd.read_sql_query(‘select * from data’,engine) # 使用sql查询