这一节, 我们要讨论 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. [转载]Java中的String,StringBuilder,StringBuffer三者的区别

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  2. [转载]转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数

    关于处理小数点位数的几个oracle函数() 1. 取四舍五入的几位小数 select round(1.2345, 3) from dual; 结果:1.235 2. 保留两位小数,只舍 select ...

  3. Django框架----路由系统、视图和模板(简单介绍)

    一.路由配置系统(urls) URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表: 你就是以这种方式告诉Django,对于这个URL ...

  4. python之运算符与基本数据类型

    1.开发工具:IDE pycharm(推荐).eclipse 2.运算符 结果是值 算数运算 a = 10 * 10 赋值运算 a = a + 1    a+=1 结果是布尔值 比较运算 a = 1 ...

  5. log4j2笔记 #04# Appender的三个基本款以及RollingFile的各种示例配置

    粗糙笔记,留着备用. 三个基本款分别是ConsoleAppender.FileAppender(以及他的堂哥RandomAccessFileAppender).RollingFileAppender( ...

  6. AngularJS的简单入门

    AngularJS诞生于2009年,由Misko Hevery等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心 ...

  7. selenium自动化之鼠标操作

    在做自动化测试的时候,经常会遇到这种情况,某个页面元素,你必须要把鼠标移动到上面才能显示出元素.那么这种情况,我们怎么处理呢?,selenium给我们提供了一个类来处理这类事件——ActionChai ...

  8. m3u8文件下载合并的一种方法

    # -*- coding: utf-8 -*- """ Created on Wed Mar 14 15:09:14 2018 @author: Y "&quo ...

  9. git小技巧--如何从其他分支merge个别文件或文件夹

    在实际工作中,一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,进行分别开发. 创建分支 功能分为2个分支,分别为A.B. A上面有个列表页功能 B上面有个详情 ...

  10. Spring Boot(六):如何使用mybatis

    Spring Boot(六):如何使用mybatis orm框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活调试动 ...