这一节将分别介绍读/写 Excel 和 CSV 文件的各种方式:

- 读入 CSV 文件

首先是准备一个 csv 文件, 这里我用的是 stock_data.csv, 文件我已上传, 大家可以直接下载下来使用. 正如前面讲过的, csv 文件可以放在 jupyter notebook 同目录下, 这样直接写文件名就可以了, 但是如果没有放在同目录下, 就需要写绝对路径, 否则读取不到.
import pandas as pd
df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/4_read_write_to_excel/stock_data.csv') df 

输入输出的效果, 截图如下:

上面就是引入 csv 文件最基本最常规的情况, 下面介绍一些特殊情况:

- 当原 csv 文件有个文件头(如下图):


大家可以自行修改一下 csv 文件, 然后在 jupyter 里运行一下看看得到什么结果, 这里就不截图了, 总之, 显然我们并不想要那多出来的一行, 可以这样做:

df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/4_read_write_to_excel/stock_data.csv', header = 1) 

这里设置了第二个参数 header=1, 意思就是我们要引入的从第一行开始以下的内容(把文件看作是从第0行开始的)
另外, 还可以这么写:

df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/4_read_write_to_excel/stock_data.csv', skiprows=1) 

也就是把第二个参数改为 skiprows=1, 意思就是要忽略的行数. 
两种方式都能得到相同的结果.

- 如果 csv 文件本身没有表头, 也就是所有的列名都不存在, 但是我们在引入的时候, 我们了解每一列都是什么值, 也就是说我们要如何在引入文件的时候自定义列名:
df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/4_read_write_to_excel/stock_data.csv', names=['stickers', 'eps', 'revenue', 'price', 'people']) 
- 读取指定的几行数据

现在我们把 csv 文件再还原到初始状态, 看下,如果我们只想读取其中的3条数据, 只要加上参数 nrows=3 即可:

df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/4_read_write_to_excel/stock_data.csv', nrows=3) 
- 整理数据, 统一空值和不合理的值

现在来具体看下表格中的数据, 会发现有些数据是没有的, 从 csv 文件中导入过来的数据看起来也有点乱, 有的写的是 'n.a.', 有的又是 'not available', 对于这些空数据, 在 Pandas 中可以统一为 'NaN'.

df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/4_read_write_to_excel/stock_data.csv', na_values=['not available', 'n.a.']) 

这里第二个参数的意思就是, 在读取文件的时候, 凡是遇到 'not available', 'n.a.' 都统一设为空值 'NaN'.

除了空值以外, 还有可能遇到不合理的值, 比如在 'revenue'(收入)列的最后一行, 值是 '-1', 这显然是不合常理的, 有可能是笔误或者什么, 总之, 我们并不知道这个值是什么, 所以也应该处理为空值'NaN'. 那么, 我们能直接在第二个参数的中括号里直接再加上 '-1' 吗? 理论上是可以实现效果的, 但是我们发现在 'eps' 列也有一个 '-1'的值, 而这个值是合理的, 因此如果我们简单粗暴地把 '-1'设为'NaN', 就会影响到这个值, 所以, 我们需要这样做:

df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/4_read_write_to_excel/stock_data.csv', na_values={ 'eps':['not available', 'n.a.'], 'revenue': ['not available', 'n.a.', -1], 'price': ['not available', 'n.a.'], 'people': ['not available', 'n.a.'] }) 

这里就是通过 dictionary 的数据形式, 具体明确每一列处理空值的方式.

以上就是读取 CSV 文件的方法和常见问题, 下面看下如何输出 CSV 文件.

- 输出 CSV 文件

只需要简单执行下面这行命令, 就可以生成一个 new.csv 文件, 至于这个文件生成在哪里, 还是去终端看下, 你此时的 jupyter notebook 运行在哪里:

df.to_csv('new.csv') 


空值部分全部为空白. 但是多了一列序号索引, 如果想去掉:

df.to_csv('new.csv', index=False) 
- 输出指定的列

如果你只想要把前两列的内容保存成 csv 文件输出. 
首先查看一下所有的列名:

df.columns

输出:

Index(['tickers', 'eps', 'revenue', 'price', 'people'], dtype='object') 

只输出 'tickers' 和 'eps' 列:

df.to_csv('new.csv', columns=['tickers', 'eps']) 

这时再查看一下 new.csv 文件, 发现里面真的只有两列.

- 不输出表头, 即列名

设置第二个参数 header = False 即可:

df.to_csv('new.csv', header = False) 

- 读取 EXCEL 文件

首先是准备一个 excel 文件, 这里我用的是 stock_data.csv, 文件我已上传, 大家可以直接下载下来使用.

import pandas as pd
df = pd.read_excel('stock_data.xlsx', 'Sheet1') df 

输出:

- 整理数据

从上图, 我们可以看到有一些 n.a. 和 not available 的数据, 我们可以做更有针对性的调整:

def convert_people_cell(cell): if cell == 'n.a.': return 'Sam Walton' return cell def convert_eps_cell(cell): if cell == 'not available': return None return cell df = pd.read_excel('stock_data.xlsx', 'Sheet1', converters={ 'people': convert_people_cell }) 

- 保存成 excel 文件输出

- 自定义输出
df.to_excel('new.xlsx', sheet_name='stocks', index=False, startrow=1, startcol=2) 

参数说明: 
sheet_name='stocks': 设置 sheet 名称
index=False: 去掉序号索引
startrow=1: 从第二行开始表格
startcol=2: 从第三列开始表格
输出:

- 把两个 dataframe 输出到一个 excel 表的两个 sheet
df_stocks = pd.DataFrame({ 'tickers': ['GOOGL', 'WMT', 'MSFT'], 'price': [845, 65, 64 ], 'pe': [30.37, 14.26, 30.97], 'eps': [27.82, 4.61, 2.12] }) df_weather = pd.DataFrame({ 'day': ['1/1/2017','1/2/2017','1/3/2017'], 'temperature': [32,35,28], 'event': ['Rain', 'Sunny', 'Snow'] }) with pd.ExcelWriter('stocks_weather.xlsx') as writer: df_stocks.to_excel(writer, sheet_name="stocks") df_weather.to_excel(writer, sheet_name="weather") 

更多关于 Pandas 读取/输出文件的属性, 可以参考官网:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

转载于:https://www.cnblogs.com/rachelross/p/10420893.html

Pandas 基础(4) - 读/写 Excel 和 CSV 文件相关推荐

  1. Pandas如何读取和导出 Excel、CSV、JSON 数据?

    转载自:Pandas如何读取和导出 Excel.CSV.JSON 数据? - 知乎 导入pandas等包 import pandas as pd import numpy as np import m ...

  2. shell读取excel_[PHP 开源类库]simple-Excel — 兼具优雅与性能的Excel和CSV文件读写工具...

    该扩展包可让你轻松读取和写入简单的 Excel 和 CSV 文件.在后台使用生成器来确保低内存使用,即使在处理大型文件时也是如此. 这是有关如何读取 Excel 或 CSV 的示例. SimpleEx ...

  3. [转载] pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...

    参考链接: 使用Pandas在Python中读写CSV文件 前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Pyth ...

  4. csv文件导入后台乱码_教师使用Excel打开csv文件出现乱码怎么办-Leo老师

    在工作学习中,我们经常会遇到教师使用Excel打开csv文件出现乱码怎么办这样的问题.夏普说过:不经巨大的困难,不会有伟大的事业.因此,面对教师使用Excel打开csv文件出现乱码怎么办我们应该有努力 ...

  5. [PHP 开源类库]simple-Excel — 兼具优雅与性能的Excel和CSV文件读写工具

    该扩展包可让你轻松读取和写入简单的 Excel 和 CSV 文件.在后台使用生成器来确保低内存使用,即使在处理大型文件时也是如此. 这是有关如何读取 Excel 或 CSV 的示例. SimpleEx ...

  6. 导入Excel和CSV文件

    读取excel或csv文件中的数据暂时保存在DataTable中, 代码如下: public static DataTable ReadDataFromFile(string file, string ...

  7. excel导入csv文件_如何将包含以0开头的列的CSV文件导入Excel

    excel导入csv文件 Microsoft Excel will automatically convert data columns into the format that it thinks ...

  8. 利用Excel删除csv文件中所有空行

    用Excel打开csv文件 查找和选择 --> 定位条件 (或者快捷键ctrl + G选择定位条件) 选择空值 确定,所有单元格被选中,邮件删除即可

  9. excel打开csv文件乱码解决办法

    参考链接: https://jingyan.baidu.com/article/4dc408484776fbc8d846f168.html 问题:用 Excel 打开 csv 文件,确认有乱码的问题. ...

  10. Excel打开csv文件乱码问题的解决办法

    产生背景 今天在用excel打开一个脚本生成的csv文件(存储编码格式为utf-8)时出现了乱码情况,但是用WPS直接打开却正常显示.因为文件是要交给客户的,office又是普遍使用的一枚办公软件,总 ...

最新文章

  1. 网站架构之统一数据服务平台技术
  2. android ndk x86 arm,How to use SIGRTMIN in x86 or armeabi-v7a abi in Android NDK?
  3. qt tounicode 崩溃_吐槽大会丨细数那些打块的崩溃瞬间!看看你中了几枪?
  4. 浅析Nginx 正向代理与反向代理
  5. w7计算机不显示移动硬盘,win7系统不显示移动硬盘怎么回事_win7移动硬盘在电脑上显示不出来如何处理-win7之家...
  6. codeforces 758 A
  7. Pass4side CompTIA PDI+ Beta Exam PD1-001 DEMO 免费下载
  8. CFFI - 简介及简单使用
  9. 计算机组成与体系结构概述
  10. 原生js发送ajax请求
  11. 软著申请说明书及源程序模板
  12. java dht 爬虫_DHT爬虫(golang版-附源码)
  13. 【技术帖】真正解决反恐精英csOL:StartService 0X204 为防御非法程序driver
  14. 分布式存储系统设计的若干原则
  15. java中对象有什么优点,Java:示例中不可变对象的优点
  16. dell t640 添加硬盘_Dell PowerEdge T640服务器安装教程
  17. 对象的属性名和属性值
  18. 【特征检测】BRISK特征提取算法
  19. PHP上传图片到服务器
  20. 企业战略 平台转型:不走寻常路

热门文章

  1. 用 Open Live Writer 来写 cnblog.com 博客
  2. Spring学习笔记17--在XML中使用SPEL
  3. UICollectionViewCell 所遇到的问题
  4. win7 任务计划 任务映像已损坏或篡改(异常来自HRESULT:0x80041321)
  5. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 主细表事务处理的标准例子...
  6. URLClassLoader加载class到当前线程类加载器【zt】
  7. 用window.showModalDialog()实现DIV模式弹出窗口
  8. Windows 10 + kali Linux 双系统安装教程(详细版)
  9. chrome下使用JS检测浏览器是否使用开发者工具
  10. Servlet JSP - 转发与重定向的区别