Pandas 学习笔记

Pandas 中的两个最重要的数据结构是 Series 和 DataFrame,其约定的引用方式为:

import pandas as pd
from pandas import Series, DataFrame

Series

Series 在 Numpy 一维数组的基础上添加了索引 index,使得其中的数据可以更加方便的通过索引进行访问和依据索引进行数据对齐 alignment。需要注意的是同数组一样,同一个Series中的数据必须是同一种数据类型。

Series 的几个常用的属性:obj.values,obj.index 用于查看其中的值和索引值。

由于构建与一维数组的基础上,因此可以沿用一维数组的切片操作:

In [2]:
np.random.seed(1)
s = pd.Series(np.random.randn(100))
s[2: 6] 

Out[2]:
2    -0.528172
3    -1.072969
4     0.865408
5    -2.301539
dtype: float64

在创建 Series 时如果不指定 index,则会默认的分配从 0 开始的整数值作为索引值,称为索引值也就意味着可以通过 index 索引到相应位置的值:

In [3]:
obj = Series([4, 7, -5, 3], index=['d', 'a', 'b', 'c'])
obj

Out[3]:
d    4
a    7
b   -5
c    3
dtype: int64

In [4]:
obj['b']

Out[4]:
-5

还通过索引赋值以及取多个值:

In [5]:
obj['d'] = 8
obj[['d', 'c', 'a']]

Out[5]:
d    8
c    3
a    7
dtype: int64

并支持类似 Numpy 数组的逻辑选取:

In [6]:
obj[obj > 2]

Out[6]:
d    8
a    7
c    3
dtype: int64

由于 Numpy 和 Pandas 在数据分析中使用的非常广泛,因此二者的兼容性非常好,可以直接采用 Numpy 中的很多方法来操作 Series:

In [7]:
np.exp(obj)

Out[7]:
d    2980.957987
a    1096.633158
b       0.006738
c      20.085537
dtype: float64

这个索引和值的关联关系反应到基本的 python 数据结构就是其可以与字典的键和值的关系对应起来,因此可以直接通过字典来创建 Series,且创建好的 Series 会自动的根据字典的键来排序:

In [8]:
states = {'ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj = Series(states)
obj

Out[8]:
Oregon    16000
Texas     71000
Utah       5000
ohio      35000
dtype: int64

也可以用很多适用于字典的函数来查询 Series:

In [9]:
'Utah' in obj

Out[9]:
True

除了索引外,Series 本身及索引本身都可以通过 name 属性来指定名称,这样做的意义是为了更好的利用已有的数据来生成 Series,以及在使用中方便的标识不同的 Series 中包含的特征信息是什么:

In [10]:
obj.name = 'population'
obj.index.name = 'state'
obj

Out[10]:
state
Oregon    16000
Texas     71000
Utah       5000
ohio      35000
Name: population, dtype: int64

创建好的索引值可以借助 index 属性通过赋值的方式来修改:

In [11]:
obj.index = ['OR', 'TX', 'UT', 'OH']
obj

Out[11]:
OR    16000
TX    71000
UT     5000
OH    35000
Name: population, dtype: int64

注意这里修改 index 后,原来的 index 的名称没有了。

对齐的一个简单的例子就是当两个 Series 做数学运算的时候,计算会发生在索引相同的项之间,而不是位置相同的项,并且不要求两个 Series 一定长度相同。

In [13]:
s3 = pd.Series([1, 2, 3], index=['d', 'c', 'b'])
s2 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
s2 + s3

Out[13]:
a    NaN
b    5.0
c    5.0
d    5.0
dtype: float64

与此对应的array的运算则是按照位置来进行,且二者的长度必须相同

DataFrame

在 Series 的基础上,DataFrame 则又可以看作是通过赋予 Series 一个名称,然后将多个 Series 进行组合操作的数据表:表的行标签是索引名,列标签是 Series 名,也称列名。

当通过字典创建 DataFrame时,列名会自动按照字母顺序进行排列:

In [14]:
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = DataFrame(data)
frame

Out[14]:
    pop state   year
0   1.5 Ohio    2000
1   1.7 Ohio    2001
2   3.6 Ohio    2002
3   2.4 Nevada  2001
4   2.9 Nevada  2002

但也可以在创建时指定列标签的顺序:

In [15]:
DataFrame(data, columns=['year', 'state', 'pop'])

Out[15]:
    year    state   pop
0   2000    Ohio    1.5
1   2001    Ohio    1.7
2   2002    Ohio    3.6
3   2001    Nevada  2.4
4   2002    Nevada  2.9

DataFrame 设置列标签和行标签的一个重要作用就是可以通过标签来访问相应的列或行:

In [3]:
frame['state']

Out[3]:
0      Ohio
1      Ohio
2      Ohio
3    Nevada
4    Nevada
Name: state, dtype: object


In [5]:
frame.loc[3]

Out[5]:
pop         2.4
state    Nevada
year       2001
Name: 3, dtype: object

另一个比较常用的创建 DataFrame 的数据来源是嵌套的字典,此时嵌套的最外层的键将作为列标签,而内层的键将作为行标签:

In [6]:
pop = {'Nevada': {2001: 2.4, 2002: 2.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame = DataFrame(pop)
frame

Out[6]:
Nevada  Ohio
2000    NaN 1.5
2001    2.4 1.7
2002    2.9 3.6

DataFrame 同时也可以做转置操作

In [7]:
frame.T
Out[7]:
2000    2001    2002
Nevada  NaN 2.4 2.9
Ohio    1.5 1.7 3.6

Pandas 文件读写

读入 CSV:pd.read_csv('directory_to_the_file/filename.csv')

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

推荐阅读更多精彩内容