Pandas 文件读取和导出

Pandas 文件读取和导出

更新时间:2020-12-28 00:16:20标签:pandas io

说明

Pandas 中文教程修订中,欢迎加微信 sinbam 提供建议、纠错、催更。查看更新日志

我们拿到的数据一般是 CSV、Excel 等格式,将文件加载到 Pandas 的 DataFrame 对象,我们就可以用它的方法进行处理了。在处理结束后,我们也需要将文件导出 Excel 等格式,方便查看。

 

本页介绍最常用的文件格式和最基本的用法,如有必要会专题介绍更加详细的功能。

功能列表

下边是我们经常使用的方法:

格式文件格式读取函数写入(输出)函数
binaryExcelread_excelto_excel
textCSVread_csv read_tableto_csv
textJSONread_jsonto_json
text网页表格 HTMLread_htmlto_html
text剪贴板read_clipboardto_clipboard
SQLSQLread_sqlto_sql
textMarkdown to_markdown

读取更多类型文件可查看官网文档。

其中:

  • 读取函数一般会赋值给一个变量 dfdf = pd.read_<xxx>()
  • 输出函数是将变量自身进行操作并输出 df.to_<xxx>()

CSV

从 CSV 文件中读取数据并加载到 DataFrame:

文件

# 文件目录
pd.read_csv('data.csv') # 如果文件与代码文件在同目录下
pd.read_csv('data/my/data.csv') # 指定目录
pd.read_csv('data/my/my.data') # CSV 文件扩展名不一定是 csv
# 使用网址 url
pd.read_csv('https://www.gairuo.com/file/data/dataset/GDP-China.csv')# 也可以从 StringIO 中读取
from io import StringIO
data = ('col1,col2,col3\n''a,b,1\n''a,b,2\n''c,d,3')
pd.read_csv(StringIO(data))

注:csv 文件扩展名不一定是 .csv

指定分隔符号

# 数据分隔转化是逗号, 如果是其他可以指定
pd.read_csv(data, sep='\t') # 制表符分隔 tab
pd.read_table(data) # read_table 默认是制表符分隔 tab

列、索引、名称

 # 默认第一行是表头,可以指定,如果指定列名会被忽略
pd.read_csv(data, header=0)
pd.read_csv(data, header=None) # 没有表头
pd.read_csv(data, names=['列1', '列2']) # 指定列名列表
# 如没列名,自动指定一个: 前缀加序数
pd.read_csv(data, prefix='c_', header=None)# 读取部分列
pd.read_csv(data, usecols=[0,4,3]) # 按索引只读取指定列,顺序无关
pd.read_csv(data, usecols=['列1', '列5']) # 按索引只读取指定列# 指定列顺序,其实是 df 的筛选功能
pd.read_csv(data, usecols=['列1', '列5'])[['列5', '列1']]
pd.read_csv(data, index_col=0) # 第几列是索引
# 以下用 callable 方式可以巧妙指定顺序, in 后边的是我们要的顺序
pd.read_csv(data, usecols=lambda x: x.upper() in ['COL3', 'COL1'])

数据类型

data = 'https://www.gairuo.com/file/data/dataset/GDP-China.csv'
# 指定数据类型
pd.read_csv(data, dtype=np.float64) # 所有数据均为此数据类型
pd.read_csv(data, dtype={'c1':np.float64, 'c2': str}) # 指定字段的类型# 解析日期时间
pd.read_csv(data, parse_dates=True) # 自动解析日期时间格式
pd.read_csv(data, parse_dates=['年份']) # 指定日期时间字段进行解析
# 将 1、4 列合并解析成名为 时间的 时间类型列
pd.read_csv(data, parse_dates={'时间':[1,4]})
# 指定时间解析库,默认是 dateutil.parser.parser
pd.read_csv(data, date_parser=pd.io.date_converters.parse_date_time)
date_parser=lambda x: pd.to_datetime(x, utc=True, format=...)

更多功能可参考 pandas.read_csv 详细使用。

导出文件

df.to_csv('done.csv')
df.to_csv('data/done.csv') # 可以指定文件目录路径
df.to_csv('done.csv', index=False) # 不要索引
# 导出二进制文件句柄(缓冲), 支持编码和压缩 pandas 1.2.0 增加
import io
buffer = io.BytesIO()
df.to_csv(buffer, encoding="utf-8", compression="gzip")

Excel 文件

read_excel() 方法可以使用 xlrd Python 模块(可能需要安装,下同)读取 Excel 2003(.xls)文件。 可以使用 xlrd 或 openpyxl 读取Excel 2007+(.xlsx)文件。 可以使用 pyxlsb 读取二进制Excel(.xlsb)文件。 to_excel() 实例方法用于将DataFrame 保存到Excel。 大多数用法类似于 csv,包括文件的读取和保存。

xlsx = pd.ExcelFile('data.xlsx')
df = pd.read_excel(xlsx, 'Sheet1') # 读取
xlsx.parse('sheet1') # 取指定标签为 DataFrame
# Excel 的所有标签
xlsx.sheet_names
# ['sheet1', 'sheet2', 'sheet3', 'sheet4']

文件读取

# Returns a DataFrame
pd.read_excel('team.xlsx') # 默认读取第一个标签页 Sheet
pd.read_excel('path_to_file.xls', sheet_name='Sheet1') # 指定 Sheet
# 从网址 url 读取
pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx')
# !!! 读取的功能基本与 read_csv 一样,可参考上文
# 不指定索引,不指定表头,使用自动行列索引
pd.read_excel('tmp.xlsx', index_col=None, header=None)
# 指定列的数据类型
pd.read_excel('tmp.xlsx', index_col=0,dtype={'Name': str, 'Value': float})

多个 Sheet 的读取:

pd.read_excel('path_to_file.xls', sheet_name=['Sheet1', 'Sheet2'])

ExcelFile 对象:

# 使用 ExcelFile 保存文件对象
xlsx = pd.ExcelFile('path_to_file.xls')
df = pd.read_excel(xlsx, 'Sheet1')# 可以把多个 Sheet 存入 ExcelFile
with pd.ExcelFile('path_to_file.xls') as xls:df1 = pd.read_excel(xls, 'Sheet1')df2 = pd.read_excel(xls, 'Sheet2')
df = pd.read_excel(xlsx)

常用的参数使用与 read_csv 相同。

导出 excel

df.to_excel('path_to_file.xlsx')
# 指定 sheet 名, 不要索引
df.to_excel('path_to_file.xlsx', sheet_name='Sheet1', index=False)
# 指定索引名,不合并单元格
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')
# By setting the 'engine' in the ExcelWriter constructor.
writer = pd.ExcelWriter('path_to_file.xlsx', engine='xlsxwriter')
df.to_excel(writer)
writer.save()# 设置系统引擎
from pandas import options  # noqa: E402
options.io.excel.xlsx.writer = 'xlsxwriter'
df.to_excel('path_to_file.xlsx', sheet_name='Sheet1')

JSON 格式

Pandas 可以读取和生成 Json 字符串,Series 或 DataFrame 都可以被转换。JSON 格式在网络上非常通用,在写爬虫时可以使用极大提高效率,在做可视化时前端的 JS 库往往需要接受 Json 格式。

读取 JSON

pd.read_json('data.json')
json = '''{"columns":["col 1","col 2"],
"index":["row 1","row 2"],
"data":[["a","b"],["c","d"]]}
'''
pd.read_json(json)
pd.read_json(json, orient='split') # json 格式
'''
orient 支持:
- 'split' : dict like {index -> [index], columns -> [columns], data -> [values]}
- 'records' : list like [{column -> value}, ... , {column -> value}]
- 'index' : dict like {index -> {column -> value}}
- 'columns' : dict like {column -> {index -> value}}
'''

输出 JSON

Series 或 DataFrame 转换 JSON 的机制如下:

  • Series :

    • 默认为 index
    • 支持 {split, records, index}
  • DataFrame

    • 默认为 columns
    • 支持 {split, records, index, columns, values, table}
df = pd.DataFrame([['a', 'b'], ['c', 'd']],index=['row 1', 'row 2'],columns=['col 1', 'col 2'])
# 输出 json 字符串
df.to_json(orient='split')

HTML

read_html() 函数可以接受 HTML字符串 / html文件 / URL,并将HTML表解析为DataFrame。返回的是一个 df 列表,可以通知索引取第几个。

仅解析网页内 <table> 标签里的数据。

dfs = pd.read_html('https://www.gairuo.com/p/pandas-io')
dfs[0] # 查看第一个 df
# 读取网页文件,第一行为表头
dfs = pd.read_html('data.html', header=0)
# 第一列为索引
dfs = pd.read_html(url, index_col=0)
# !!! 常用的功能与 read_csv 相同,可参考上文

如果一个网页表格很多,可以指定元素来取得:

# id='table' 的表格,注意这儿仍然可能返回多个
dfs1 = pd.read_html(url, attrs={'id': 'table'})
# dfs1[0]
# class='sortable'
dfs2 = pd.read_html(url, attrs={'class': 'sortable'})

常用的参数使用与 read_csv 相同。

输出 html

会输出 html 表格代码字符串。

print(df.to_html())
print(df.to_html(columns=[0])) # 输出指定列
print(df.to_html(bold_rows=False)) # 表头不加粗体
# 表格指定样式,支持多个
print(df.to_html(classes=['class1', 'class2']))

剪贴板 Clipboard

剪贴板(Clipboard)是操作系统级的一个暂存数据的地方,它存在内存中,可以在不同软件之间传递,非常方便。pandas 支持读取剪贴板中的结构化数据,这就意味着我们不用将数据保存成文件,直接从网页、文件中复制,然后中直接读取,非常方便。

读取剪贴板,它的参数使用与 read_csv 完全一样:

'''A B C
x 1 4 p
y 2 5 q
z 3 6 r
'''
# 复制上边的数据,然后直接赋值
cdf = pd.read_clipboard()

保存到剪贴板:

# 执行完找个地方粘贴一下看看效果
df = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6],'C': ['p', 'q', 'r']},index=['x', 'y', 'z'])
df.to_clipboard()

SQL

Pandas 支持连接数据库进行查询,有以下几个方法:

  • read_sql_table(table_name, con[, schema, …]), 把数据表里的数据转成 DataFrame
  • read_sql_query(sql, con[, index_col, …]), 用 sql 查询数据到 DataFrame
  • read_sql(sql, con[, index_col, …]), 同时支持上边两个功能
  • DataFrame.to_sql(self, name, con[, schema, …]),把记录数据写到数据库里
# 需要安装 sqlalchemy 库
from sqlalchemy import create_engine
# 创建数据库对象,sqlite 内存模式
engine = create_engine('sqlite:///:memory:')
# 把表名为 data 的表数据拿出来
with engine.connect() as conn, conn.begin():data = pd.read_sql_table('data', conn)# data
# 将数据写入
data.to_sql('data', engine)
# 大量写入
data.to_sql('data_chunked', engine, chunksize=1000)
# 使用 sql 查询
pd.read_sql_query('SELECT * FROM data', engine)

输出 Markdown

Markdown 是一种常用的技术文档编写语言,Pandas 支持输出 Markdown 格式字符串:

print(df.to_markdown())
'''
|    |   A |   B | C   |
|:---|----:|----:|:----|
| x  |   1 |   4 | p   |
| y  |   2 |   5 | q   |
| z  |   3 |   6 | r   |
'''# 不需要索引
print(df.to_markdown(index=False))
# 填充空值
print(df.fillna('').to_markdown(index=False))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitlab的用户使用手册

最近比较忙&#xff0c;没时间写博客&#xff0c;今天来的早所以写一篇关于gitlab的使用手册分享给大家。目录一、账户/项目申请二、登陆与修改密码三、SSH Key导入四、上传/下载代码1、上传&#xff08;用户系统为linux&#xff09;2、下载&#xff08;用户系统为linux&#x…

学计算机多久能拿证,计算机证书多久能领取 什么时候拿

计算机证书多久能领取&#xff0c;什么时候能拿&#xff0c;小编整理了相关信息&#xff0c;希望会对大家有所帮助&#xff01;计算机证书什么时候能领取1、一般情况下是考试结束后50个工作日左右出成绩及出证。全国计算机等级考试证书一年两次考试。每年的3月与9月考试。2、证…

MySQL_0

2019独角兽企业重金招聘Python工程师标准>>> 网址&#xff1a; http://www.mysqlpub.com 转载于:https://my.oschina.net/u/194743/blog/160145

TensorFlow 2.0 mnist手写数字识别(CNN卷积神经网络)

TensorFlow 2.0 (五) - mnist手写数字识别(CNN卷积神经网络) 源代码/数据集已上传到 Github - tensorflow-tutorial-samples 大白话讲解卷积神经网络工作原理&#xff0c;推荐一个bilibili的讲卷积神经网络的视频&#xff0c;up主从youtube搬运过来&#xff0c;用中文讲了一遍。…

计算机组成原理第06章在线测试,计算机组成原理第六章单元测试(二)(含答案)(4页)-原创力文档...

PAGEPAGE 1第六章单元测验 (二)书生1、用以指定待执行指令所在主存地址的寄存器是______。(单选)????A、指令寄存器IR????B、程序计数器PC????C、存储器地址寄存器MAR????D、数据缓冲寄存器2、下列关于微程序和微指令的叙述中______是正确的。(单选)????A、…

前端笔试练习一

前端笔试练习一 请编写一段程序&#xff0c;将一个对象和它直接、间接引用的所有对象的属性字符串放入一个数组。如var o {a:1,{b:2,c:{d:1}}}这里o经过处理后&#xff0c;应该得到["a","b","c","d"] 1 <!DOCTYPE html PUBLIC &qu…

职业梦想是计算机的英语作文,理想职业英语作文2篇

篇一&#xff1a;大学英语作文之我理想的工作my ideal jobMy Ideal JobAs college students, we will step into the society, and now we need to prepare for our future and arrange for our future career life, we need to take into consideration what to do in the fut…

C语言二维数组中的指针问题

#include "stdio.h" void main() {int a[5][5];int i,j;for (i0;i<5;i){for (j0;j<5;j){a[i][j] i;}} for (i0;i<5;i){for (j0;j<5;j){printf("%d ",a[i][j]);}printf("\n");} }转载于:https://blog.51cto.com/shamrock/12…

爬取微信小程序源码

爬取微信小程序源码 想知道爬取微信小程序有多简单吗&#xff1f;一张图、三个步骤&#xff0c;拿到你想要的任何微信小程序源码。

C#对称加密(AES加密)每次生成的密文结果不同思路代码分享

思路&#xff1a;使用随机向量&#xff0c;把随机向量放入密文中&#xff0c;每次解密时从密文中截取前16位&#xff0c;其实就是我们之前加密的随机向量。 代码 public static string Encrypt(string plainText, string AESKey){RijndaelManaged rijndaelCipher new Rijndael…

计算机音乐简谱图片,1(音乐简谱基本音级)_百度百科

1是指在音乐简谱中的音乐简谱基本音级。[1]1代表音阶中的1个基本音级&#xff0c;读音为Do(谐音汉字“哆”)&#xff0c;在C大调里唱Do。常用来表示音级第一位或首位。中文名哆外文名do术语范围音 高C大调里的Do英 文One在音乐简谱中&#xff0c;1代表音阶中的1个基本音级…

马老师 生产环境mysql主从复制、架构优化方案

Binlog日志(主服务器) > 中继日志(从服务器 运行一遍,保持一致)。从服务器是否要二进制日志取决于架构设计。如果二进制保存足够稳定&#xff0c;从性能上来说&#xff0c;从服务器不需要二进制日志。默认情况下&#xff0c;mysql主从复制是异步的。 异步&#xff1a;命令写…

10分钟带你学会微信小程序的反编译

以xxxxx小程序为例10分钟带你学会微信小程序的反编译 2019-11-28 12:59:26 以一个简单的例子介绍下小程序反编译操作流程 实验环境前置准备模拟器内软件安装获取小程序包开始解包导入开发者工具补充注意事项技术交流群有偿解包uniapp 逆向服务逆向教程小程序分包教程#实验环境…

中html倒入css那么套路,CSS常用套路

a标签去除原颜色(改为白色)和下划线text-decoration: none;color: #ffffff;列表标签去除默认小点:list-style-type:none;设置元素透明度&#xff1a;opacity:0.5;页面中文字无法被选中&#xff1a;user-select: none;鼠标悬停&#xff0c;样式变化的方法&#xff1a;a:hover {o…

try catch finally的执行顺序到底是怎样的?

首先执行try&#xff0c;如果有异常执行catch&#xff0c;无论如何都会执行finally一个函数中肯定会执行finally中的部分。 关于一个函数的执行过程是&#xff0c;当有return以后&#xff0c;函数就会把这个数据存储在某个位置&#xff0c;然后告诉主函数&#xff0c;我不执行了…

反编译Android APK详细操作指南

早在4年前我曾发表过一篇关于《Android开发之反编译与防止反编译》的文章&#xff0c;在该文章中我对如何在Windows平台反编译APK做了讲解&#xff0c;如今用Mac系统的同学越来越多&#xff0c;也有很多朋友问我能否出一篇关于如何在Mac平台上反编译APK的文章&#xff0c;今天呢…

Ext.grid.CheckboxSelectionModel状态设置

直接上代码&#xff1a; var model grid.getSelectionModel();model.selectAll();//选择所有行model.selectFirstRow();//选择第一行model.selectLastRow([flag]);//选择最后一行,flag为正的话保持当前已经选中的行数,不填则默认falsemodel.selectNext();//选择下一行model.se…

MySql PreparedStatement用法 及 Transaction处理

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException;public class TestJDBC {/*** 当银行转账时&#xff0c;需要在汇款人账户上扣除汇款金额&#xff0c;同时在收款人账户上存入汇款金额&#xff…

计算机硬件维修所需技能实习报告,计算机软硬件及网络维护技能实习报告.doc...

计算机软硬件及网络维护技能实习报告计软络维护主板硬盘内存CPU&#xff0c;光驱显卡声卡网卡主板&#xff0c;又叫主机板、系统板和母板&#xff1b;它安装在机箱内&#xff0c;是微机最基本的也是最重要的部件之一。光驱就是播放光盘的,一下安装程序,游戏程序的都是放在光盘里…

用idea新建springboot项目遇到的@Restcontroller不能导入的问题

我个人的解决方法如下&#xff1a; 1.springboot默认有 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>o…