这一节, 我们要讨论 Pandas 的输入与输出, 并且应用在现实的实际例子中. 为了得到大量的数据, 向大家推荐一个网站 Quandl. Quandl 有很多免费和付费的资源. 这个网站最大的优势在于数据的规范化, 集中性以及提取数据的方式都是一样的. 如果你获取数据的时候, 选择用 Python, 那么数据会自动转成 dataframe. 但是, 我们这节课的目的是理解 Pandas 的输入与输出, 所以我们还是手动下载一个 CSV 文件.

举个例子, 我们想要买卖德克萨斯州的一处房产. 那里的邮政编码是 77006. 我们可以去查看当地的房产清单, 并且可以了解到现在的市场价, 但是我们却得不到历史信息. 但是我们可以在 Quandl 得到这方面的信息. 我们可以查寻 "home value index 77006". 我们可以得到一系列的结果, 有高, 中, 低档, 还有三室的等等. 加入我们想要一个三居室的房子. 我们选中一个, 然后点进去看一下. 事实上, Quandl 已经提供了图表数据, 但是出于学习的目的, 我们还是获取其数据集, 自己制作图表, 以及其他的一些数据分析. 选择 CSV 格式并下载. Pandas 支持 csv, excel, hdf, sql, json, msgpack, html, gbg, stata, clipboard, pickle data 等格式的输入输出. 把下载好的 csv 文件放在与你在操作的 python 脚本文件的文件夹里.

下面开始处理这个 csv 文件, 首先是导入并转成 dataframe:

import pandas as pd

df = pd.read_csv('ZILL-Z77006_3B.csv')
print(df.head())

输出:

         Date  Value
0 2018-11-30 48.3
1 2018-10-31 48.1
2 2018-09-30 48.3
3 2018-08-31 49.4
4 2018-07-31 49.2

通过这个输出, 我们发现, 我们需要设置一个合适的索引:

df.set_index('Date', inplace = True)

输出:

            Value
Date
2018-11-30 48.3
2018-10-31 48.1
2018-09-30 48.3
2018-08-31 49.4
2018-07-31 49.2

现在, 我们又想把这个 dataframe 输出成 csv 文件呢?

df.to_csv('newCsv.csv')

好了, 现在查看一下你的项目文件夹, 看看是否多了一个 newCsv.csv 文件? 理论上, 应该是有的. 可以打开看一下这个文件, 大概长这个样子:

目前我们这个例子是只有一个 value 列, 但是如果你的数据里有很多的列, 然而, 你只想将其中的某一列输出到 csv 文件, 可以这样做:

df['Value'].to_csv('newCsv2.csv')

生成的 csv 文件大概长这样:

由于在之前我们把 "Date" 设置成了索引列, 所以日期列作为索引列也一并输出了, 但是与之前去别的是没有表头了. 这里大家可以自己尝试一下, 不要"Date"列做索引, 那么就不会输出日期这一列, 但是同样会输出一列自增数字.

下面, 我们再来读入第一个生成的 csv 文件:

df = pd.read_csv('newCsv.csv')
print(df.head())

输出:

        Date  Value
0 2018-11-30 48.3
1 2018-10-31 48.1
2 2018-09-30 48.3
3 2018-08-31 49.4
4 2018-07-31 49.2

见鬼, 我们定义的索引又没有了. 这是因为 CSV 文件并没有"索引"属性. 为了解决这个问题, 我们可以在读取的时候同时设置索引, 而不是读取之后再设置索引:

df = pd.read_csv('newCsv.csv', index_col=0)
print(df.head())

Output:

             Value
Date
2015-06-30 502300
2015-05-31 501500
2015-04-30 500100
2015-03-31 495800
2015-02-28 492700

这里 index_col = 0 的意思就是把第0列设置为索引列.

还有一个问题, 就是 "Value" 这个列名其实是没有什么实际意义的, 我们需要给它一个具有实际意义的名字, 有很多方法可以更改列名, 下面介绍其中一种:

df.columns = ['Austin_HPI']
print(df.head())

输出:

            Austin_HPI
Date
2018-11-30 48.3
2018-10-31 48.1
2018-09-30 48.3
2018-08-31 49.4
2018-07-31 49.2

接下来, 我们再把这个 dataframe 保存成一个新的 csv 文件:

df.to_csv('newcsv3.csv')

打开文件看下, 大概长这样:

我们看到新生成文件带上了表头, 那么如果你不想要这个表头, 要怎么做呢?

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

这样保存的 newcsv4.csv 文件就没有表头了, 那么当我们再想读入这个文件的时候, 自然就也是没有表头的了, 那么要怎么在读取文件的同时加上表头呢? 可以这样操作:

df = pd.read_csv('newcsv4.csv', names = ['Date','House_Price'], index_col=0)
print(df.head())

输出:

             Austin_HPI
Date
2018-11-30 48.3
2018-10-31 48.1
2018-09-30 48.3
2018-08-31 49.4
2018-07-31 49.2

以上就是一些基本的输入/输出操作.

正如我们前面所说的, Pandas 支持各种格式的输入/输出. 下面我们来尝试一下以 html 的格式输出 df 文件:

df.to_html('example.html')

这其实就是 html 的表格, 大家可以查看源码看一下. 生成的 example.html 大概长这样:

有一点要注意的是: 这个表格被自动赋予了 "dataframe" 类, 也就是说你还可以对其自定义其他 CSS 样式.

当我需要 SQL 输出的时候, 我特别喜欢使用 Pandas. 我会把数据库里的所有数据都转成 dataframe 格式, 然后做需要的计算, 再以我想要的格式输出.

最后, 介绍一下如果你想改变某一列的列名, 该怎么做呢:

df = pd.read_csv('newcsv4.csv', names=['Date', 'Austin_HPI'])
print(df.head()) df.rename(columns={'Austin_HPI': '77006_HPI'}, inplace=True)
print(df.head())

输出:

         Date  Austin_HPI
0 2018-11-30 48.3
1 2018-10-31 48.1
2 2018-09-30 48.3
3 2018-08-31 49.4
4 2018-07-31 49.2
Date 77006_HPI
0 2018-11-30 48.3
1 2018-10-31 48.1
2 2018-09-30 48.3
3 2018-08-31 49.4
4 2018-07-31 49.2

这里呢, 我们首先读入文件, 并且分别给字段命名为 "Date" 和 "Austin_HPI". 然后, 我们决定不叫 "Austin_HPI", 而要改为 "77006_HPI". 所以, 我们使用 df.rename() 函数, 指定我们我想改变的列的名字. 记住这里别忘了加上 "inplace=True" 来确保对原对象做了更改, 而不是生成一个新对象.

后面会持续更新, 有任何问题或者错误, 欢迎留言, 希望和大家交流学习.

基于 Python 和 Pandas 的数据分析(3) --- 输入/输出 基础的更多相关文章

  1. 基于 Python 和 Pandas 的数据分析(1)

    基于 Python 和 Pandas 的数据分析(1) Pandas 是 Python 的一个模块(module), 我们将用 Python 完成接下来的数据分析的学习. Pandas 模块是一个高性 ...

  2. 基于 Python 和 Pandas 的数据分析(4) --- 建立数据集

    这一节我想对使用 Python 和 Pandas 的数据分析做一些扩展. 假设我们是亿万富翁, 我们会想要多元化地进行投资, 比如股票, 分红, 金融市场等, 那么现在我们要聚焦房地产市场, 做一些这 ...

  3. 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础

    在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...

  4. 基于 Python 和 Pandas 的数据分析(7) --- Pickling

    上一节我们介绍了几种合并数据的方法. 这一节, 我们将重新开始不动产的例子. 在第四节中我们写了如下代码: import Quandl import pandas as pd fiddy_states ...

  5. 基于 Python 和 Pandas 的数据分析(6) --- Joining and Merging

    这一节我们将看一下如何通过 join 和 merge 来合并 dataframe. import pandas as pd df1 = pd.DataFrame({'HPI':[80,85,88,85 ...

  6. 基于 Python 和 Pandas 的数据分析(5) --- Concatenating and Appending

    这一节我们将会介绍几种不同的合并数据的方法. 在我们这个不动产投资的例子中, 我们希望获取 51 个州的房产数据, 并把它们组合起来. 我们这样做有很多原因. 这样做既便于我们做分析, 同时也可以占用 ...

  7. 万字长文,Python数据分析实战,使用Pandas进行数据分析

    文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  8. python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言)

    python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言) 感觉要总结总结了,希望这次能写个系列文章分享分享心得,和大神们交流交流,提升提升. 因为 ...

  9. 基于Python的数据分析(1):配置安装环境

    数据分析是一个历史久远的东西,但是直到近代微型计算机的普及,数据分析的价值才得到大家的重视.到了今天,数据分析已经成为企业生产运维的一个核心组成部分. 据我自己做数据分析的经验来看,目前数据分析按照使 ...

随机推荐

  1. JavaScript:原生JS实现Facebook实时消息抓捕

    基础知识准备: HTML5给我们提供了一个新的对象叫作:MutationObserver.为了兼容,还有WebKitMutationObserver.MozMutationObserver,挂靠在wi ...

  2. python--字典dict

    字典由多个键与其对应的值构成的对组成,是另一种可变容器模型,且可存储任意类型对象.字典的每个键值用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中. 注:字典中的键是唯一的( ...

  3. Symfony2 学习笔记之服务容器

    现在的PHP应用程序都是面向对象开发,所以主要是由对象构成.有的对象可以方便的分发邮件信息而有的可能帮你把信息写入到数据库中.在你的应用程序中,你可能创建一个对象用于管理你的产品库存,或者另外一个对象 ...

  4. Linux下MySQL远程链接配置

    配置步骤: 1).首先进入数据库,使用系统数据库mysql mysql -u root -p mysql 2).接着对系统数据库的root账户设置远程访问的密码,与本地的root访问密码并不冲突 gr ...

  5. android基本架构

    Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA ...

  6. Wi-Fi Mesh网络技术

    Wi-Fi在很早的时候就引入了mesh技术,并且最近得到了越来越多的关注.谷歌.Eero.Linksys.Netgear以及几乎所有以家庭和小型办公室为目标的网络品牌都提供了mesh网格系统.但是也有 ...

  7. vue 实现modal

    本文只是作为练习弹出框,弹框内部的东西需要进行自定义添加,主要对更新,删除,新建 ,提示四种弹框进行实现,例子中只是简单的组件应用 Modal.vue文件 <template> <d ...

  8. Eloquent JavaScript #08# Bugs and Errors

    索引 Notes strict mode js类型 js测试 Debugging Exceptions finally 异常分支 Exercise Retry The locked box Notes ...

  9. Kivy之常用的小知识

    1.设置标题 app.title = '测试' 2.设置屏幕长度 Window.size=1000,600 3.设置屏幕右上角icon app.title = r'C:\Users\Administr ...

  10. 定时释放Linux/CentOS缓存

    #!/bin/bash used=`free -m | awk 'NR==2' | awk '{print $3}'` free=`free -m | awk 'NR==2' | awk '{prin ...