Pandas的使用

Pandas是在numpy上加强的包,是高效实施数据框的包。DataFrame的本质是可以容纳不同数据类型的数组。并且还有数组名。

安装和导入

import pandas
import pandas as pd

从三个方面认识pandas

Series DataFrame Index

import numpy as np
import pandas as pd

series

Pandas的series对象是一个一维的有索引数组,可以通过列表创建。

>>> data = pd.Series([0.25, 0.5, 0.75, 1.0])
>>> data
0    0.25
1    0.50
2    0.75
3    1.00
dtype: float64

Series包含一个有顺序的值和一个有顺序的索引。
可以通过:data.index data.value 来访问。

可以看到,Series比numpy一维数组更加灵活。

创建:

#通过列表创建
data = pd.Series([0.25, 0.5, 0.75, 1.0],
                 index=['a', 'b', 'c', 'd'])
#通过字典来创建
population_dict = {'California': 38332521,
                   'Texas': 26448193,
                   'New York': 19651127,
                   'Florida': 19552860,
                   'Illinois': 12882135}
population = pd.Series(population_dict)
#广播数组创建
pd.Series(5, index=[100, 200, 300])

DataFrame

DataFrame 是多行Series构成的,具有行索引index,和 列名 columns。
可以通过 data.index 和 data.columns访问。
创建DataFrame对象

#通过简单的Series对象
states = pd.DataFrame({'serie1':serie1,'serie2':serie2})

#通过字典创建
data = [{'a':i,'b':2*i} for i in range(3)]
pd.DateFrame(data)

#通过一个二维numpy数组
A = np.zeros(3,dtype=[('A','i8'),('B','f8')])
A
pd.DataFrame(A)

pandas中的Index对象

pandas的对象最主要的区别就是有index,和colomns.
index 就如同一个数组。也可以直接访问

ind = pd.Index([2,3,5,7,11])
ind
ind[::2]
#索引之间的联合操作
indA = pd.Index([1, 3, 5, 7, 9])
indB = pd.Index([2, 3, 5, 7, 11])
indA & indB  # intersection
indA | indB  # union
indA ^ indB  # symmetric difference

通用函数功能:

建立索引

series : 建立索引

rng = np.random.RandomState(42)
ser = pd.Series(rng.randint(0, 10, 4))
ser
pandas :建立索引
df = pd.DataFrame(rng.randint(0, 10, (3, 4)),
columns=['A', 'B', 'C', 'D'])

对数据帧和索引进行运算时需要对齐索引,对于未对齐的数据运算值为NAN。设立填充值。

fill = A.stack().mean()
A.add(B, fill_value=fill)

序列与数据框之间的操作

类似二维数组numpy,直接使用类似的操作运算或者访问。

A = rng.randint(10, size=(3, 4))
A
A - A[0]
df = pd.DataFrame(A, columns=list('QRST'))
df - df.iloc[0]

iloc[]表示隐示访问

缺失值处理

任何对缺失值nan的运算都是nan
可以使用忽略缺失值的聚合运算方法。

np.nansum(vals2)
np.nanmin(vals2)
np.nanmax(vals2)

请注意,除了将整型数组强制转换为浮点,pandas还自动将none转换为nan值

在pandas中,字符串数据使用object类型储存。

对空值的操作

删除、探索、填充

探究 isnull(): Generate a boolean mask indicating missing values
notnull(): Opposite of isnull()
删除 dropna(): Return a filtered version of the data
填充 fillna(): Return a copy of the data with missing values filled or imputed

分层索引

多索引序列

老实方法:

index = [('California', 2000), ('California', 2010),
('New York', 2000), ('New York', 2010),
('Texas', 2000), ('Texas', 2010)]
populations = [33871648, 37253956,
18976457, 19378102,
20851820, 25145561]
pop = pd.Series(populations, index=index)
pop

并不提倡使用该方法
更好的方法:使用pandas多层索引

index = pd.MultiIndex.from_tuples(index)#来源于元组
index

使用reindex()重赋索引

pop = pop.reindex(index)
pop

额外的索引

使用stack()可以将多索引序列转化为常规序列。相反 unstack()将常规序列转化为多索引序列。

创建多索引的方法

df = pd.DataFrame(np.random.rand(4, 2),
index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
columns=['data1', 'data2'])
df

使用字典

data = {('California', 2000): 33871648,
('California', 2010): 37253956,
('Texas', 2000): 20851820,
('Texas', 2010): 25145561,
('New York', 2000): 18976457,
('New York', 2010): 19378102}
pd.Series(data)

隐式的多层索引结构

pd.MultiIndex.from_arrays([['a', 'a', 'b', 'b'], [1, 2, 1, 2]])
pd.MultiIndex.from_tuples([('a', 1), ('a', 2), ('b', 1), ('b', 2)])
pd.MultiIndex.from_product([['a', 'b'], [1, 2]])

多层索引命名

pop.index.names = ['state', 'year']

多层列名索引

columns = pd.MultiIndex.from_product([['Bob', 'Guido', 'Sue'], ['HR', 'Temp']],
names=['subject', 'type'])
health_data = pd.DataFrame(data, index=index, columns=columns)

多层索引的索引和切片

series:

pop['California', 2000]#第一层 第二层
pop['California']#索引式‘california’的数据
pop.loc['California':'New York']#同理 显式

多层索引重塑

data = data.sort_index()
pop.unstack(level=0)
pop_flat = pop.reset_index(name='population')

对多层索引使用聚合函数

data_mean = health_data.mean(level='year')
data_mean.mean(axis=1, level='type')

数据集的联合

concat()

在numpy中如何连接数据?

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
np.concatenate([x, y, z])
np.concatenate([x, y], axis=1)

在pandas中:

ser1 = pd.Series(['A', 'B', 'C'], index=[1, 2, 3])
ser2 = pd.Series(['D', 'E', 'F'], index=[4, 5, 6])
pd.concat([ser1, ser2])

补充:使用display可以显示数据框。

display('x', 'y', 'pd.concat([x, y], ignore_index=True)') #忽略索引

增加主键值:

display('x', 'y', "pd.concat([x, y], keys=['x', 'y'])")

内连接,外连接,左连接,右连接
display('df5', 'df6',
"pd.concat([df5, df6], join='inner')")

append()

display('df1', 'df2', 'df1.append(df2)')

在原数据框上追加一个数据框。

merge()

合并
具有相同项的合并

df3 = pd.merge(df1, df2)

更多请查看函数帮助

聚合分组函数

简单的聚合函数

sum()
mean()

groupBy:

流程:
split -> apply ->combine

df.groupby('key')
df.groupby('key').sum()

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

推荐阅读更多精彩内容