在前面的文章里,我介绍了如何使用Pandas去读写一个CSV文件,其实Pandas的功能还不仅仅限于此,它还可以读写Excel、Hdf、html、Json等多种文件格式。除此以外,Pandas还拥有众多的数据处理的功能。尤其我们在处理大数据的时候,Pandas就显得额外的功能强大。

用过Numpy的同学可能会觉得Numpy已经是非常的好用了,但是一旦当你把Pandas和Numpy结合起来,那感觉正是:金风玉露一相逢,便胜却人间无数。

今天我们就来讲Pandas的一些使用方法和技巧,作为大家在写Python程序时候的查阅笔记来使用。

我们仍然使用我们之前使用过的OHLCV数据作为示例,当然有些技巧中这个示例可能不足以表现其功能的强大,我们会适时的对数据进行一些修改。为了照顾没有读过以前文章的同学,我们照例贴出我们的CSV文件内容,其中‘>’符号作为缩进使用。

>>>>date,open,high,low,close19991110,29.5,29.8,27.0,27.7519991111,27.58,28.38,27.53,27.7119991112,27.86,28.3,27.77,28.0519991115,28.2,28.25,27.7,27.7519991116,27.88,27.97,26.48,26.5519991117,26.5,27.18,26.37,27.1819991118,27.2,27.58,26.78,27.0219991119,27.5,27.53,26.8,26.8819991122,26.88,26.95,26.3,26.4519991123,26.45,26.55,26.1,26.45

打印Dataframe的信息

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)df.info()运行结果:RangeIndex: 10 entries, 0 to 9Data columns (total 5 columns):date 10 non-null int64open 10 non-null float64high 10 non-null float64low 10 non-null float64close 10 non-null float64dtypes: float64(4), int64(1)memory usage: 480.0 bytes

我们可以看到这个Dataframe的数据类型以及一些统计信息。

取Dataframe的前N行

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.head(3))

运行结果:

>>>>date open high low close0 19991110 29.50 29.80 27.00 27.751 19991111 27.58 28.38 27.53 27.712 19991112 27.86 28.30 27.77 28.05

删除一行

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.drop(2, axis=0))

运行结果:

>>>>date open high low close0 19991110 29.50 29.80 27.00 27.751 19991111 27.58 28.38 27.53 27.713 19991115 28.20 28.25 27.70 27.754 19991116 27.88 27.97 26.48 26.555 19991117 26.50 27.18 26.37 27.186 19991118 27.20 27.58 26.78 27.027 19991119 27.50 27.53 26.80 26.888 19991122 26.88 26.95 26.30 26.459 19991123 26.45 26.55 26.10 26.45

删除一列

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.drop('date', axis=1))

运行结果:

>>>>open high low close0 29.50 29.80 27.00 27.751 27.58 28.38 27.53 27.712 27.86 28.30 27.77 28.053 28.20 28.25 27.70 27.754 27.88 27.97 26.48 26.555 26.50 27.18 26.37 27.186 27.20 27.58 26.78 27.027 27.50 27.53 26.80 26.888 26.88 26.95 26.30 26.459 26.45 26.55 26.10 26.45

删除有空值的行或者列

我们预先对文件ohlcv.txt进行一下修改,我们添加一个列名。

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df)

我们打印出来的结果为:

>>>>date open high low close volume0 19991110 29.50 29.80 27.00 27.75 NaN1 19991111 27.58 28.38 27.53 27.71 NaN2 19991112 27.86 28.30 27.77 28.05 NaN3 19991115 28.20 28.25 27.70 27.75 NaN4 19991116 27.88 27.97 26.48 26.55 NaN5 19991117 26.50 27.18 26.37 27.18 NaN6 19991118 27.20 27.58 26.78 27.02 NaN7 19991119 27.50 27.53 26.80 26.88 NaN8 19991122 26.88 26.95 26.30 26.45 NaN9 19991123 26.45 26.55 26.10 26.45 NaN

这下我们有一个拥有空值得Dataframe了,我们接下来来去掉含有空值的列。

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.dropna(axis=1))

运行结果为:

>>>>date open high low close0 19991110 29.50 29.80 27.00 27.751 19991111 27.58 28.38 27.53 27.712 19991112 27.86 28.30 27.77 28.053 19991115 28.20 28.25 27.70 27.754 19991116 27.88 27.97 26.48 26.555 19991117 26.50 27.18 26.37 27.186 19991118 27.20 27.58 26.78 27.027 19991119 27.50 27.53 26.80 26.888 19991122 26.88 26.95 26.30 26.459 19991123 26.45 26.55 26.10 26.45

接下来我们来删除拥有空值的行,由于我们每一行都有空值,我们来看一下是否如我们所料。

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.dropna())

果然,我们发现运行结果如下:

Empty DataFrameColumns: [date, open, high, low, close, volume]Index: []

将空值设为指定值

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.fillna(0.0))

运行结果:

>>>>date open high low close volume0 19991110 29.50 29.80 27.00 27.75 0.01 19991111 27.58 28.38 27.53 27.71 0.02 19991112 27.86 28.30 27.77 28.05 0.03 19991115 28.20 28.25 27.70 27.75 0.04 19991116 27.88 27.97 26.48 26.55 0.05 19991117 26.50 27.18 26.37 27.18 0.06 19991118 27.20 27.58 26.78 27.02 0.07 19991119 27.50 27.53 26.80 26.88 0.08 19991122 26.88 26.95 26.30 26.45 0.09 19991123 26.45 26.55 26.10 26.45 0.0

对某一行或列进行运算

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.loc[:,'open'].apply(lambda x: x-1.0))print(df.loc[1,:].apply(lambda x: x*2))

运行结果:

0 28.501 26.582 26.863 27.204 26.885 25.506 26.207 26.508 25.889 25.45Name: open, dtype: float64date 39982222.00open 55.16high 56.76low 55.06close 55.42volume NaNName: 1, dtype: float64

我们可以看到分别打印出的结果都是对原来的行和列进行了相应的运算,NaN的结果是因为我们原本读出来的Dataframe有空值。

并且,我们这里用了lambda和apply。也就是说并不仅仅限于运算,你可以以任何你需要的方式进行使用。

条件选取部分元素

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.loc[df['date'] == 19991119,['date', 'close']])

运行结果:

>>>>date close7 19991119 26.88

我们可以看到打印的结果为19991119这一天里的date和close值,如果我们想打印整行,则可以用:

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.loc[df['date'] == 19991119])

运行结果:

>>>>date open high low close volume7 19991119 27.5 27.53 26.8 26.88 NaN

对Dataframe以某列排序

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.sort_values(['date'],ascending=False))

运行结果:

>>>>date open high low close volume9 19991123 26.45 26.55 26.10 26.45 NaN8 19991122 26.88 26.95 26.30 26.45 NaN7 19991119 27.50 27.53 26.80 26.88 NaN6 19991118 27.20 27.58 26.78 27.02 NaN5 19991117 26.50 27.18 26.37 27.18 NaN4 19991116 27.88 27.97 26.48 26.55 NaN3 19991115 28.20 28.25 27.70 27.75 NaN2 19991112 27.86 28.30 27.77 28.05 NaN1 19991111 27.58 28.38 27.53 27.71 NaN0 19991110 29.50 29.80 27.00 27.75 NaN

我们进行了逆序排列,大家可以看到index的序号是逆序的。

数据可视化

我们以直方图为例:

import pandas as pdimport matplotlib.pyplot as pltfile = 'ohlcv.txt'df = pd.read_csv(file)df.hist()plt.show()

运行结果如下图:

loc与iloc

这两个都是用来索引Dataframe的,看名字大家就应该知道区别了,iloc是纯用index来进行索引,而loc则可以用Name。我们下面来看几个例子。

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.loc[1:3,['date','close']])

运行结果:

>>>>date close1 19991111 27.712 19991112 28.053 19991115 27.75

大家注意在使用loc的时候,并不是像我们切片一样使用的是实际的行号。也就是说,如果是按照切片的方式,是不包含‘3’这一行的。下面我们用iloc来比较一下就比较清楚了。

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df.iloc[1:3, 0:2])

运行结果:

>>>>date open1 19991111 27.582 19991112 27.86

重命名列名

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)df.columns = ['D', 'O', 'H', 'L', 'C', 'V']print(df)

运行结果:

>>>>D O H L C V0 19991110 29.50 29.80 27.00 27.75 NaN1 19991111 27.58 28.38 27.53 27.71 NaN2 19991112 27.86 28.30 27.77 28.05 NaN3 19991115 28.20 28.25 27.70 27.75 NaN4 19991116 27.88 27.97 26.48 26.55 NaN5 19991117 26.50 27.18 26.37 27.18 NaN6 19991118 27.20 27.58 26.78 27.02 NaN7 19991119 27.50 27.53 26.80 26.88 NaN8 19991122 26.88 26.95 26.30 26.45 NaN9 19991123 26.45 26.55 26.10 26.45 NaN

修改一列的数据类型

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df['date'].astype(float))

运行结果:

0 19991110.01 19991111.02 19991112.03 19991115.04 19991116.05 19991117.06 19991118.07 19991119.08 19991122.09 19991123.0

注意这个操作仅仅可对Dataframe的一个Series进行,Dataframe的一行或者一列称之为一个Series。

替换某行或者某列中的值

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df['date'].replace(19991117, 88888888))

运行结果:

0 199911101 199911112 199911123 199911154 199911165 888888886 199911187 199911198 199911229 19991123Name: date, dtype: int64

选取满足特定条件的行列值

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)print(df[(df['date']>19991116) & (df['date']<19991120)])

注意这里是Bool判断,不要用逻辑与‘and’。

运行结果:

>>>>date open high low close volume5 19991117 26.5 27.18 26.37 27.18 NaN6 19991118 27.2 27.58 26.78 27.02 NaN7 19991119 27.5 27.53 26.80 26.88 NaN

重置索引号

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)df = df[(df['date']>19991116) & (df['date']<19991120)]df = df.reset_index()

运行结果:

>>>>index date open high low close volume0 5 19991117 26.5 27.18 26.37 27.18 NaN1 6 19991118 27.2 27.58 26.78 27.02 NaN2 7 19991119 27.5 27.53 26.80 26.88 NaN

根据某一列值进行分组

我们先给Dataframe添加一名为‘code’的列,它的值有三种:‘APPLE'、’AMD‘和’AMAZON‘。分组后我们将获得三个Dataframe。

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)df.loc[:,'code'] = 'APPLE'df.loc[3:6, 'code'] = 'AMD'df.loc[7:9, 'code'] = 'AMAZON'for code, edf in df.groupby(['code']):>>>>print(code)>>>>print(edf)

运行结果:

AMAZON>>>>date open high low close volume code7 19991119 27.50 27.53 26.8 26.88 NaN AMAZON8 19991122 26.88 26.95 26.3 26.45 NaN AMAZON9 19991123 26.45 26.55 26.1 26.45 NaN AMAZONAMD>>>>date open high low close volume code3 19991115 28.20 28.25 27.70 27.75 NaN AMD4 19991116 27.88 27.97 26.48 26.55 NaN AMD5 19991117 26.50 27.18 26.37 27.18 NaN AMD6 19991118 27.20 27.58 26.78 27.02 NaN AMDAPPLE>>>>date open high low close volume code0 19991110 29.50 29.80 27.00 27.75 NaN APPLE1 19991111 27.58 28.38 27.53 27.71 NaN APPLE2 19991112 27.86 28.30 27.77 28.05 NaN APPLE

按行合并两个Dataframe

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)df1 = df.loc[0:3,:]df2 = df.loc[4:9,:]df3 = df1.append(df2)print(df3)

我们先将Dataframe切片成两个,然后进行合并,运行结果如下:

>>>>date open high low close volume0 19991110 29.50 29.80 27.00 27.75 NaN1 19991111 27.58 28.38 27.53 27.71 NaN2 19991112 27.86 28.30 27.77 28.05 NaN3 19991115 28.20 28.25 27.70 27.75 NaN4 19991116 27.88 27.97 26.48 26.55 NaN5 19991117 26.50 27.18 26.37 27.18 NaN6 19991118 27.20 27.58 26.78 27.02 NaN7 19991119 27.50 27.53 26.80 26.88 NaN8 19991122 26.88 26.95 26.30 26.45 NaN9 19991123 26.45 26.55 26.10 26.45 NaN

两个Dataframe按列进行合并

import pandas as pdfile = 'ohlcv.txt'df = pd.read_csv(file)df1 = df.iloc[:,0:4]df2 = df.iloc[:,4:6]df3 = pd.concat([df1, df2],axis=1)print(df3)

运行结果:

>>>>date open high low close volume0 19991110 29.50 29.80 27.00 27.75 NaN1 19991111 27.58 28.38 27.53 27.71 NaN2 19991112 27.86 28.30 27.77 28.05 NaN3 19991115 28.20 28.25 27.70 27.75 NaN4 19991116 27.88 27.97 26.48 26.55 NaN5 19991117 26.50 27.18 26.37 27.18 NaN6 19991118 27.20 27.58 26.78 27.02 NaN7 19991119 27.50 27.53 26.80 26.88 NaN8 19991122 26.88 26.95 26.30 26.45 NaN9 19991123 26.45 26.55 26.10 26.45 NaN

到这里我们对于Pandas的技巧就介绍结束了,当然,其实这些仅仅是Pandas的常用用法。Pandas作为数据科学家们最钟爱的Python包之一,其功能强大可见一斑。其实关于任何一门语言的学习,最重要的还是多写多用,所谓的高手,唯手熟尔。当然,这是在正确的方法的前提下,所以说,Open your mind是非常重要的,大部分人学习新的东西容易半途而废往往是因为自己对新事物的抗拒打败了自己。

pandas打印某一列_零基础学Python--不得不说的Pandas小技巧相关推荐

  1. python 智能造句_[零基础学Python]正规地说一句话

    小孩子刚刚开始学说话的时候,常常是一个字一个字地开始学,比如学说"饺子",对他/她来讲,似乎有点难度,大人也聪明,于是就简化了,用"饺饺"来代替,其实就是让孩子 ...

  2. python语言程序设计难不难_零基础学Python编程开发难度大吗?从哪学起?

    转行零基础学Python编程开发难度大吗?从哪学起? 近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大? 今天,小编就来为大家详细解读一下这个问题. ...

  3. c字符串中包含双引号_零基础学Python:一文看懂数字和字符串

    来源:大数据DT 本文约2000字,建议阅读6分钟 数据类型是构成编程语言语法的基础.[ 导读 ]数据类型是构成编程语言语法的基础.不同的编程语言有不同的数据类型,但都具有常用的几种数据类型.Pyth ...

  4. python培训一般多久_零基础学python需要多久

    一:明确自己的学习目标.不管我们学习什么样的知识,都要对自己的学习目标有一个明确的认识.只有这样才能朝着目标持续的前进,少走弯路,从而在学习的过程中得到提升,享受整个学习的乐趣. 二:基础的Pytho ...

  5. python入门到熟练要多久_零基础学python要多久

    零基础进行Python学习的话,如果选择自学,一般学习周期在一年半左右.选择进行培训的话,学习Python周期一般在五到六个月左右,不过学习的种类不同,班级不同,培训周期也是存在一定差异的. 零基础学 ...

  6. python语言学习零基础教学视频_零基础学Python语言CAP全套课程

    零基础学Python语言CAP完整版课程目录 ├─{1}–[第1周,第一单元]Python编程之基本方法 │ ├─{1}–1.1课程内容和安排介绍 │ │ ├─(1.1.1)–课程内容和安排介绍-PP ...

  7. 0基础学python需要多长时间_零基础学python大概要多久

    如果是自学的话,零基础学python大概要花一年到一年半的时间.每个人的资质不同.理解能力不同,所以花费的时间也不一样.建议零基础的学员报一个python培训班,这样可以有规划的系统性学习,而且花费的 ...

  8. 有c语言基础学python容易吗_零基础学Python之前需要学c语言吗

    Python本身是比较适合作为入门编程语言来学习的,一方面Python的语法结构比较简单清晰,实验也相对比较容易完成,这会逐渐增强初学者的学习信心,另一方面Python属于全场景编程语言,未来在很多领 ...

  9. python赋值运算符难理解_零基础学 Python(8)运算符 — 算术、比较、赋值、逻辑...

    Python 的运算符有:算术运算符.比较运算符.赋值运算符.逻辑运算符.成员运算符.位运算符.身份运算符.本章主要讲解 Python 的算术运算符.比较运算符.赋值运算符.逻辑运算符. 算术运算符 ...

最新文章

  1. WinCE设置多国语言支持
  2. Spark streaming java代码
  3. 丘成桐:完全不懂数学,才会有“数学无用”的说法
  4. js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题...
  5. Dell 12G服务器 手动安装RedHat 6.X
  6. Javascript 中的非空判断 undefined,null, NaN的区别
  7. 即时通讯源码/im源码uniapp基于在线聊天系统附完整搭建部署教程
  8. c语言贪吃蛇程序设计报告蚂蚁文库,贪吃蛇游戏C程序设计报告
  9. Mockito单元测试
  10. Debian10安装Chromium浏览器
  11. java 判断邮箱_java使用正则表达式判断邮箱格式是否正确的方法
  12. 荷马史诗——解题报告
  13. 上网软件 Chrome/FireFox插件-gooreplacer
  14. win10 安装.net framework3.5 失败,遇到0x800f081f并提示“找不到源文件。请使用“源”选项指定还原该功能所需的文件位置” 的问题
  15. 笔记本电脑的电池损耗度——命令符查看
  16. 算法还原练习-20160920
  17. [L氏并查集] Python 列表法实现非递归并查集,轻松权重优化。
  18. 数据可视化实验一之单变量数据的统计图表可视化
  19. 【产业互联网周报】外媒:英特尔等公司暂停向俄罗斯发货;阿里云季度营收195亿元;第四范式再次提交上市申请...
  20. [JavaSE] 数据类型(变量、整形、长整型、双精度浮点、单精度浮点、字符、字节)

热门文章

  1. 面试圣经——京东之行
  2. 学位论文精读-hBMSCs在肿瘤微环境中分泌IL-6并上调IL-17水平协同促进DLBCL生长的研究
  3. 职业能力倾向测试下什么软件,职业能力倾向测验
  4. 人生之路 — 开启智慧之脑
  5. 小白学python-决策树和随机森林
  6. ORB特征点提取与均匀化——ORBSLAM2源码讲解(一)
  7. 成功路上并不拥挤 因为坚持的人不多
  8. 11.练习:用*号打印直角三角形
  9. Nosql之Redis的概念介绍+安装配置+Redis数据库基本操作
  10. 吉林大学计算机学院学位预警,长春新区发布2021年学位预警!7所学校学位告急!...