pandas笔记(pandas Data Structures)

pandas包含数据结构和数据操作工具,可用于进行数据清理和快速分析。pandas经常和数字计算工具(比如NumPy和SciPy)一起使用分析文库,或者与matplotlib一起使用进行数据的可视化。pandas采用NumPy的基于数组计算的部分惯用风格,特别是基于数组的计算函数和不带for循环的数据处理。虽然pandas采用了许多来自NumPy的编码习惯用法,但最大的区别在于pandas是为处理表格或异质性(heterogeneous)数据而设计的。相反,NumPy适合处理均一的(homogeneous)数值阵列数据。

使用下面代码调用pandas:

import pandas as pd

所以,如果你看到了有pd.**这样的代码,就说明是pandas的功能。

有关于pandas的数据结构,你需要了解两种主要的数据结构:Series 和 DataFrame。虽然这两个数据结构不能解决所有的问题,但是却可以提供一个坚实的、易于使用的应用基础。

Series

Series是一个一维的、类似数组的对象,它包含一系列的值,和一个相关数组(数据标签),也叫做索引(index)。最简单的Series是由一个数组组成的数据:

In [1]: import pandas as pd

In [2]: obj = pd.Series([4, 7, -5, 3])

In [3]: obj
Out[3]:
0    4
1    7
2   -5
3    3
dtype: int64

In [4]: obj.values
Out[4]: array([ 4,  7, -5,  3])

In [5]: obj.index
Out[5]: RangeIndex(start=0, stop=4, step=1)

因为上面我们并没有为数据指定索引,所以默认的索引就是从0开始的整数,当然你可以自定义数据的索引:

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

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

In [8]: obj2.index
Out[8]: Index(['d', 'b', 'a', 'c'], dtype='object')

筛选大于0的元素以及其对应的索引:

In [9]: obj2[obj2>0]
Out[9]:
d    4
b    7
c    3
dtype: int64

对Series进行计算:

In [10]: obj2 * 2
Out[10]:
d     8
b    14
a   -10
c     6
dtype: int64

如果你的data是一个python dict,也可以通过dict构建一个Series:

In [11]: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}

In [12]: obj3 = pd.Series(sdata)

In [13]: obj3
Out[13]:
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64

你也可以从Series里提取出指定的索引以及其对应的内容:

In [15]: states = ['California', 'Ohio', 'Oregon', 'Texas']

In [16]: obj4 = pd.Series(sdata,index=states)

In [17]: obj4
Out[17]:
California        NaN #这里显示的是NaN,是因为在obj3里并没有索引为“California”的内容
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64

将两个Seires相加:

In [18]: obj3 + obj4
Out[18]:
California         NaN #只有obj4里有California这个索引
Ohio           70000.0
Oregon         32000.0
Texas         142000.0
Utah               NaN #只有obj3里有Utah这个索引,所以任何数和NaN相加都是NaN
dtype: float64

给对象命名,并且给索引这一列加一个列名:

In [19]: obj4.name = 'population'

In [20]: obj4.index.name = 'state'

In [21]: obj4
Out[21]:
state
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
Name: population, dtype: float64

DataFrame

DataFrame对于很多分析过生信的人来说并不陌生,它是一个table,包含行和列,行和列有各自的数据类型(数字,字符串等等)。这里的DataFrame有行索引和列索引,你可以把它看成一个具有相同索引的Series字典。数据被存储在一个或更多的二维模块里,而不是列表、字典或其他一些一维数组里。

有很多种方法可以构建DataFrame

(1)最常用的方法是利用等长的list组成的字典或者Numpy array来构建DataFrame:

In [23]: data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
    ...: 'year': [2000, 2001, 2002, 2001, 2002, 2003],
    ...: 'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}

In [24]: frame = pd.DataFrame(data)

In [25]: frame
Out[25]:
    state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9
5  Nevada  2003  3.2

如果这里你用的是jupyter notebook的web界面,输出的DataFrame会更好看一些:

查看DataFrame的前5列:

In [26]: frame.head()
Out[26]:
    state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9

修改你的DataFrame的列名:

In [27]: pd.DataFrame(data, columns=['year', 'state', 'pop'])
Out[27]:
   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
5  2003  Nevada  3.2

提取DataFrame里的某一列:

In [28]: frame['state']
Out[28]:
0      Ohio
1      Ohio
2      Ohio
3    Nevada
4    Nevada
5    Nevada
Name: state, dtype: object

In [29]: frame['year']
Out[29]:
0    2000
1    2001
2    2002
3    2001
4    2002
5    2003
Name: year, dtype: int64

提取DateFrame里的行:

In [6]: frame.loc[frame['state']=='Ohio'] #提取state一列里是Ohio的行
Out[6]:
  state  year  pop
0  Ohio  2000  1.5
1  Ohio  2001  1.7
2  Ohio  2002  3.6

给DataFrame加一列:

In [13]: frame['eastern'] = frame.state == 'Ohio'

In [14]: frame
Out[14]:
    state  year  pop   eastern
0    Ohio  2000  1.5     True
1    Ohio  2001  1.7     True
2    Ohio  2002  3.6     True
3  Nevada  2001  2.4     False
4  Nevada  2002  2.9     False
5  Nevada  2003  3.2     False

删除一列:

In [16]: del frame['eastern']

In [17]: frame
Out[17]:
    state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9
5  Nevada  2003  3.2

显示列名:

In [18]: frame.columns
Out[18]: Index(['state', 'year', 'pop'], dtype='object')

(2)利用嵌套字典构建DataFrame

In [19]: pop = {'Nevada': {2001: 2.4, 2002: 2.9},
    ...: 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}

In [20]: frame3 = pd.DataFrame(pop)

In [21]: frame3
Out[21]:
      Nevada  Ohio
2001     2.4   1.7
2002     2.9   3.6
2000     NaN   1.5

DataFrame转置:

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

根据索引提取内容:

In [23]: pd.DataFrame(pop, index=[2001, 2002, 2003])
Out[23]:
      Nevada  Ohio
2001     2.4   1.7
2002     2.9   3.6
2003     NaN   NaN #原dataFrame里没有2003这个索引,所以结果这里是NaN

给索引列和列名分别起名字:

In [24]: frame3.index.name = 'year'; frame3.columns.name = 'state'

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