pandas

Pandas中的主要数据结构有两个:Series和DataFrame和Index
关键是比numpy 多了个index
Series是一种类似于一维数组(Python中的list)的对象,由一组数据和一组索引(下标)两部分组成。Series可以保存任何数据类型。
DataFrame是一个二维的表格型数据结构,可以把它想象成是一个Excel表格来理解,既有行索引,也有列索引。其中每列可以是不同的值类型。
Index也是比较常见的数据结构,虽然没有前两者那么重要,但也是必不可少的。

  1. 创建

  • 创建Series
    Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
    data 可以为 列表,1维 np.array ,默认index 是0,1,2,3 ,或者字典(字典的key 当index用)
  • 创建dataFrame
    DataFrame由具有共同索引的Series按列排列构成(2D)
    df = pd.DataFrame(data=data, index=index, columns=columns)
    data为 二维数组,或者 字典
    data3 = { 'A' : { 'a':1, 'b':4}, 'B': {'a':2,'b':5}, 'C':{'a':3, 'c':6} }
    pd.read_csv(filepath_or_buffer, sep=',', header='infer', names=None, index_col=None, encoding=None ) #从文件创建
    pd.read_excel(io, sheetname=0, header=0, index_col=None, names=None)
  1. 索引

data = [1,2,3]
index = ['a','b','c']
s = Series(data=data, index=index)

s['b'] # scalar, 返回一个值
s[0:2] # 范围,左闭右开,返回Series切片
s['a':'c'] # 注意,利用标签切片的时候左右都是闭区间
s[[0,2]] #列表,返回Series切片
s[['a','c']] 选择a c两行
mask = [False, True, False] #mask,类似于列表,只是长度必须和Series相同,返回Series切片
s[mask]
s.loc['b'] # 单索引,返回一个值
s.loc['a':'c'] # 范围,注意:左闭右闭,返回Series切片
s.loc[['a','c']] # 列表,返回Series切片
s.iloc[1] # scalar, 返回一个值
s.iloc[0:2] # 范围,左闭右开,返回Series切片
s.iloc[[0, 2]] #列表,返回Series切片

  1. 修改

Series.replace(to_replace=None, value=None, inplace=False)
to_replace:要修改的值,可以为列表
value:改为的值,可以为列表,与to_repalce要匹配;
inplace:是否在原地修改;
Series.rename(index=None, level = None, inplace = False)
Series.append(to_append, ignore_index=False, verify_integrity=False)
to_append: 另一个series或多个Series构成的列表
ignore_index:False-保留原有索引,True-清除所有索引,生成默认数值索引;
verify_integrity:True的情况下,如果to_append索引与当前索引有重复,则报错
s1.drop(['a','c'])

  1. dataFrame 索引

索引 (一个个列出来的) 是列操作,切片(冒号的是切片)是行操作,一维布尔索引是行操作

df['A'] # 列操作,单列索引,返回Series。相当于 df.A。
df[['A','C']] # 列操作,列索引列表,返回DataFrame
df[0] #报错
df[0:1] # 行操作,位置范围,返回DataFrame
mask = [False, True]
df[mask] # 行操作,mask,必须和行长度一致,返回DataFrame
df.loc['b','B'] # 返回单一值,因为两维都是单索引
df.loc['a':'b', 'A'] #返回Series,如果只有一维是单索引
df.loc[['a','b'], 'B'] #两个维度 分别当作series 对待
df.iloc[[0,1], [0,2]] # 返回DataFrame
df.loc['c']=[7,8,9] 增加 c 行
df['D']=[7,8,9] 增加D列

  1. dataFrame合并

pd.concat([df, df1], axis=0 ) 增加多行
pd.concat([df, df1], axis=1 ) 增加多列
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort = False)
指定列的相同数据的排列组合,left_on ,index 这些就是用来指定用哪列数据来merge ,用列或者索引数值。左右参数配对使用。
例子:

pd.merge(df1,df2,how='left',right_on='data2',left_index=True)

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True)
例子:

pd.concat([df1,df2],axis=1,keys=['x','y'])

merge是更注重内部数据融合,concat更偏重index和column连接。

  1. dataFrame行列转换

DataFrame.set_index(keys, drop=True, append=False, inplace=False)#keys是列名 ,将key这一列转换为index drop:True or False,是否保留原列;append:True or False,是否保留当前索引;inplace:True or False,是否原地修改
例子:

df.set_index(['A','C'], drop = False, append = False) 
A C  变为level0和level1 index的name
df.set_index(keys = [['A','C']], append = False) 
如果是单层[],会查找column, append为False,实现了改索引功能 , 给index修改为指定的字符列表。

DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
level:int 或者行索引的名字,可以为列表,默认包含所有行索引。drop:True or False,是否将行索引插入到列中,默认是插入;inplace:是否本地修改;col_level:如果列索引也是多重的,那么新插入的列设置哪一重索引;col_fill:如果有多重索引,除了col_level已经设置的. 多重level index ,从左到右level0,1.。

df1.reset_index(level=0,drop=False)
  level_0  B  C
A
1       a  2  3
4       b  5  6

df1.index.set_names(['ab'], inplace = True) #给index的名字变为 ab

  1. 处理Series和index里面的字符 重点str

和python 字符串功能类似,只不过是放到pandas框架下更方便处理

s=pd.Series(['a_b_c', 'c_d_e', np.nan, 'f_g_h'])

s.str[0] # 可以直接通过位置索引 str按列形式,将每个字符拆开
0 a
1 c
2 NaN
3 f
s.str.split('') #返回 series
0 [a, b, c]
1 [c, d, e]
2 NaN
3 [f, g, h]
dtype: object
s.str.split('
', expand=True) # 指定参数进行扩展 返回dataFrame
0 1 2
0 a b c
1 c d e
2 NaN NaN NaN
3 f g h
s.str.split('_', expand=True, n=1) # 限制扩展的数量

0 1
0 a b_c
1 c d_e
2 NaN NaN
3 f g_h

s.str.split('', expand=True).get(1) # 等效于 s.str.split('',expand = True)[1]

s.str.rsplit('_', expand=True, n=1)# rsplit和split方法类似,只是从反方向来访问
s.str.cat() #series本身连接返回成str类型
s.str.cat(sep=',')
s.str.cat(sep=',', na_rep='-')
s.str.cat(('A', 'B', 'C', 'D', 'E')) 两个series左右连接 返回单series

  1. 常用函数

.info() 查看整体信息
.ndim, .shape, .size
.head(), .tail()
.describe() 计算数值的平均数 中位数等

  1. 计算

series 和 dataFrame 做运算
df1 = pd.DataFrame([[1,2],[3,4]], index =['a','b'],columns = ['A','B'])
df2 = pd.DataFrame([[3,4],[5,6]], index =['b','c'],columns = ['B','C'])
+号默认将Series的index与DataFrame的columns对齐,然后以DataFrame的index为index,纵向复制构造一个DataFrame。
DataFrame.add(other, axis='columns', fill_value=None)
other:另一个DataFrame或Series;
axis:如果other是Series,指定Series的索引去和DataFrame的行匹配,还是和列匹配(匹配column或者index完全一致)(+号是默认和列匹配),axis是index就横向复制,axis是columns就纵向复制。
fill_value:这个参数是指两个DataFrame只有一个值缺失的情况,缺失的值怎么处理。两者都缺失,那么就是NaN。
sub() 减法 乘法mul() 除法div() 模运算mod() 幂运算pow() 类似
dot() 点积
df1.T
.abs() 求绝对值
.cumxxx(axis='index') * 累计运算,从开始到当前数据结束获取一个值。 axis:'index'或'columns' xxx 可取:max, min, sum, prod
.clip(lower=None, upper=None) 裁剪也即将数据裁剪到一定范围内 ,将数据选取到此lower到upper范围内。

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

推荐阅读更多精彩内容