《利用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中矢量化的字符串函数

你可能感兴趣的:(《利用python进行数据分析》第七章)