小蛇学python(8)pandas库之DataFrame

有数据的地方就有表格。无论是异常值处理,清除缺省值,还是增删改查,无论是csv还是mysql等各种数据库,无不是以表格的形式存储数据。表格在数据中成为了一个绕不开的话题,因此专门处理数据的pandas库中出现DataFrame也就不显得奇怪了。

今天,给大家简单介绍一下DataFrame。

我们约定在程序开头的包引入是这种写法。

from pandas import DataFrame

我们先初始化一个表格,然后再对它的各种操作进行一系列讲解。构建DataFrame的方法有很多,最常见的就是利用NumPy数组组成的字典传入。如下。

data = {'姓名' : ['李大', '王二', '张三', '李四'], '薪酬' : [10000, 8000, 12000, 5000], '工作' : ['程序员', '程序员鼓励师', '产品经理', '运营']}
frame = DataFrame(data)
1.png

我们可以看到,姓名,薪酬,工作是作为列的,而自动生成的索引是作为行的。这是python中pandas约定俗称的格式。

我们可以对该表格,进行矩阵运算。比如矩阵转置。

frame = frame.T

然后我们会得到如下结果

2.png

这个操作非常简单,注意T要大写,而且非常有用。比如当我们得到一大堆已经存储在数据库中数据,我们想对它进行索引。当我们不想使用默认的数字来当作索引时(比如上课老师点名,你觉得是点学号好,还是点姓名好呢?),我们可以通过转置来改变索引。

我们之前使用NumPy数组传入的,如果我们传入列在数据中找不到,表格就会自动生成NA值,表示这里为空。

data = {'姓名' : ['李大', '王二', '张三', '李四'], '薪酬' : [10000, 8000, 12000, 5000], '工作' : ['程序员', '程序员鼓励师', '产品经理', '运营']}
frame = DataFrame(data, columns= ['姓名', '薪酬', '工作', '是否有女朋友'], index= [1, 2, 3, 4])
3.png

我们可以看到,在是否有女朋友那一栏全部自动生成了NaN, 表示这一列数据为空。这里我们也可以得到启发,就是表格的index(索引)也是可以改变的,不一定就非要是数字。比如。

data = {'姓名' : ['李大', '王二', '张三', '李四'], '薪酬' : [10000, 8000, 12000, 5000], '工作' : ['程序员', '程序员鼓励师', '产品经理', '运营']}
frame = DataFrame(data, columns= ['姓名', '薪酬', '工作', '是否有女朋友'], index= ['one', 'two', 'three', 'four'])
4.png

可以看到,索引变成了英文单词。接着来,我们知道,程序员一般没有女朋友,程序员鼓励师一般是女生也没有女朋友,但是产品经理,运营这种天天比较喜欢吹的人,往往就有女朋友(不公平啊)。我们如何更改表格数据让它更符合客观事实呢?

这就涉及到表格的查找了,表格的查找有很多,我把它分为位置查找和范围查找。

位置查找有三种方法,分别是函数ix、loc、iloc,ix现在已经不推荐使用了。我们主要来介绍后面两种函数。它俩的区别用一句话来概括就是,当用行号来索引时用iloc,当用行名,标签来索引的时候用iloc,而且是只能这么用。做一下对比你们就明白了。

data = {'姓名' : ['李大', '王二', '张三', '李四'], '薪酬' : [10000, 8000, 12000, 5000], '工作' : ['程序员', '程序员鼓励师', '产品经理', '运营']}
frame = DataFrame(data, columns= ['姓名', '薪酬', '工作', '是否有女朋友'], index= [1, 2, 3, 4])
#frame = DataFrame(data, columns= [1, 2, 3, 4], index= [1, 2, 3, 4])

frame = frame.iloc[2:3]
print(frame)
5.png

可当我们把索引代码稍微改一下,程序就会报错。

frame = frame.iloc[2:3, '是否有女朋友']
6.png

这是因为我的行索引为数字,而列索引是字符串导致的。这时候如果想达到要求效果就应该用loc。

frame.loc[3:4, '是否有女朋友'] = '有'
7.png

我们发现社会对单身狗是比较鄙视,所以我们想把没有女朋友的这几行给删掉,其实也就是删除缺省值。如下。

print(frame.dropna())
8.png

讲完了位置查找的主要内容,接下来我们说一下范围查找。以上面那个表格为例子,我们想找出工资不低于一万的人的资料如何做呢?如下。

print(frame[frame['薪酬'] >= 10000])
9.png

是不是特别的方便呢?感觉就像是在数据库中操作,而且比sql语句更加简洁。所以用python处理小型数据量的工程,其实用excel的csv格式进行存储,增删改查是比数据库要方便,轻量级且简单的。

以上,是DataFrame最简单的应用,看完博客后读者可以自行发挥想象,组合出不同的使用方式。但是万变不离其宗,彻底理解最基础的操作,才是最重要的,而且最基础的操作其实都很简单。

接下来我们介绍NumPy与Pandas中都有的一个定义,叫做广播。我们都知道,列表只可以和列表做运算,列表如果和整数运算就会报错。可是在NumPy、Pandas中就分别赋予了数组与表格对整数和一位数组的运算。如果需要更加形象的来表述何为广播。我觉得应该说,它赋予了数据形式可以与比其低一个维度的数据形式运算的能力。

test1 = np.array(range(1, 10))
print(test1)
print(test1 - 1)
10.png

数组里每个元素都比原来少了1,这个功能的出现使得python更加灵活。其实我对它的最大感悟就是,它使得我在for循环时解决索引溢出问题方便多了。

表格也可以进行广播操作。

frame = DataFrame(np.arange(12).reshape((4,3)), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon'])
print(frame)
series = frame.loc['Utah']
print(series)
print(frame - series)
11.png

最后给大家介绍一个表格绘图功能。我们知道,matplotlib是python中最常用的画图功能,不过它有它自身的缺陷,它像是一个组装工具箱一样,标题,标签,横纵坐标等等,需要一个一个组装上去,最后形成一张图片。而且当一张图上需要表现多组数据,比如呈现多条折线的时候,matplotlib使用起来十分麻烦。但是pandas可以几行代码非常简单的实现这些功能。

import numpy as np
from matplotlib import pyplot as plt
from pandas import DataFrame
import pandas as pd

df = DataFrame(np.random.randn(10,4).cumsum(0),
               columns=['A', 'B', 'C', 'D'],
               index=np.arange(0,100,10))
df.plot()
plt.show()
Figure_1.png

可以看到,列名可以当作标签,自动选择颜色,直接用表格plot,这里其实是用表格来调用了matplotlib的api。可以实现一图展现多行数据进行对比的功能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容