《利用python进行数据分析》第七章

第七章 数据规整化:清理、转换、合并、重塑

合并数据集

  • pandas.merge:根据键将不同DataFrame中的行连接起来。
#默认做inner连接
pandas.merge(df1, df2, on=['key_a', 'key_b',...], how='outer')
# 两个对象列名不同可以分别指定
pandas.merge(df1, df2, left_on='key1', right_on='key2', how='outer')
# left_index=True或right_index=True说明索引应该被用作连接键
pandas.merge(df1,df2,left_on='key',right_index=True)
#对于层次化索引,必须以列表的形式指明用作合并键的多个列(注意对重复索引值的处理)
#join方法
df2.join(df1, how='outer')

轴索引

  • pandas.concat:沿着一条轴将多个对象堆叠到一起
    默认axis=0(行),如果axis=1,则结果变成DataFrame。

合并重叠数据

#用df2填补df1的空值
df1.combine_first(df2)

重塑和轴向旋转

重塑层次化索引

  • stack():列->行
  • unstack():行->列

将“长格式”旋转为“宽格式”

  • pivot('行索引', '列索引', '填充数据的列名')

数据转换

移除重复数据

  • duplicated()
    默认用于全部列
# 指定列
data.drop_dulicates(['k1'])

利用函数或映射进行数据转换

data['新列名'] = data['food'].map(str.lower).map('字典名')
# 或者使用函数
data['food'].map(lamda x: 字典名[x.lower()])

替换值

  • replace()
data.replace(-999, np.nan)
data.replace([-999, -1000], np.nan)

重命名轴索引

rename():创建数据集的转换板

#可结合字典对象
data.rename(index{'OHIO':'INDIANA'}
            ,columns={'three':'peekaboo'})
#就地修改
data.rename(inplace=True)

离散化和面元划分

连续数据常常被离散化或拆分为“面元”

  • cut
ages = [20, 22, 25, 27, 21, 23, 37, 61, 45, 41, 32]
bins = [18, 25, 35, 60, 100] #拆分点
cats = pd.cut(ages, bins, right=True) #设置右边是闭端
#自己设置面元名称
cats = pd.cut(ages, bins, label=group_names)
#若cut传入的是面元的数量,而不是具体的边界,则根据数据的最大最小值计算等长面元
cats = pd.cut(ages, 4, percision=2)

返回一个特殊的Categorical对象,有属性labels, levels, value_counts

  • qcut
    根据样本分位数对数据进行面元划分,使面元中具有相同数量的点。

检测和过滤异常值

  • any
#选出“超过3或-3的值”
data[(np.abs(data) > 3).any(1)]
#将值限制在[-3, 3]
data[np.abs(data) > 3] = np.sign(data) * 3

排列和随机采样

  • permutation
df.take(np.random.permutation(len(df))[:3])

计算指标/哑变量

  • get_dummies
    派生K列矩阵
#给指标矩阵的列加上前缀,以可以跟其他数据合并
dummies = pd.get_dummies(df['key'], prefix='key')
结果:列'a'变成了'key_a',于是可以跟原矩阵df合并

字符串操作

字符串对象方法

  • split
    拆分
  • strip
    去掉空白符(包括换行符)
  • join
    将列表内的字符串用某个符号连接
pieces = ['a', 'b', 'c']
val = '::'.join(pieces)
结果:'a::b::c'
  • in
    检测子串,或者用find或index
    注:若找不到字符串,index会引发异常,find返回-1
  • count
    返回指定子串的出现次数
  • replace
    替换、删除
val.replace('::', '')

正则表达式

跳过

pandas中矢量化的字符串函数

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

推荐阅读更多精彩内容