数据分析库pandas入门 4——添加数据、合并数据

Pandas库使用入门4

在前几篇关于 pandas 的文章中,笔者分别介绍了:
pandas 的基本数据结构、数据对象的创建和查看
pandas 数据的数值运算、统计和排序
对 DataFrame 类型数据的索引和轴进行的一些操作
本篇介绍添加数据和合并数据。

添加数据

给已有DataFrame添加一,可以使用直接赋值:df[‘列名’] = [‘值’] 或者 df[‘列名’] = Series对象,也可以使用 assign 方法:

  • df.assign(**kwargs)
    该方法可以添加一列或者多列,可以直接传入新列也可以在原有列的基础上进行运算产生新列。注意:该方法返回一个新数据,不会改变原数据。

给已有DataFrame/Series添加,可采用 append 方法:

  • df.append(other, ignore_index=False, verfy_integrity=False, sort=False)或者series.append(to_append, ignore_index=False, verfy_integrity=False)
    该方法添加的数据可以是一个DataFrame/Series对象或者其列表,DataFrame对象还可以通过一个字典添加一行数据。DataFrame对象添加结果的列是两个数据列的并集。

给已有DataFrame/Series添加特定数据可以使用 combine_firstcombine 方法:

  • df.combine_first(other_df) 或者 series.combine_first(other_series)
    该方法用参数对象中的数据给调用者填补空缺、增加数据。结果的index/columns是两个数据的并集。结果中每个元素值这样产生:如果调用者不是NaN,则选择调用者的值;如果调用者是NaN,则选择参数的值。
  • df.combine(other_df, func, fill_value, overwrite=True) 或者 series.combine(other_series, func, fill_value)
    该方法采用 func 函数获得合并后的元素值,结果的 index/columns 是两个数据的并集。
    fill_value:一个标量,在合并之前先用它来填充 NaN。
    overwrite:若为 True 则原地修改调用者;若为 False,则返回一个新对象。

上述示例如下:

import numpy as np
import pandas as pd

df1 = pd.DataFrame({'c1':[1,2,9,6,8],'c3':[5,2,1,7,1],'c4':[3,5,0,2,0]},index = ['a','c','d','f','p'])
df1['c2'] = [-2,0,-3,-5,9]       # 直接赋值添加一列
df1['c5'] = df['c3'] / df['c1']  # 通过运算添加一列
df1.assign(col5=[-12,13,14,15,16],col6=[2,1,4,1,6])  # 添加两列
df1.assign(col5=df["c1"] * 3 / 4 + 25)               # 通过运算添加一列
df1.assign(col5=lambda x: x.c1 / 2 + 20)             # 通过函数添加一列

df2 = pd.DataFrame({'c1':[0,1],'c2':[-2,7],'c3':[-9,5]},index = ['a','c'])
df3 = pd.DataFrame({'c1':['pp','po'],'c2':[90,70],'c3':[-9,5]})
df1.append(df2)         
df1.append([df2, df3])  
data_dict = {'c1':'n1','c2':'n2','c3':'n3','c4':'n4'}
df1.append(data_dict, ignore_index=True)  # 使用字典添加行,ignore_index必须为True

df1.combine_first(df2)  # 填补空缺、增加数据
df1.combine(df2, func=lambda x,y: y if np.isnan(x['a']) else x)  # 根据函数添加合并数据

合并数据

整理数据时,可能需要多张表格组合到一起才能进行某些问题的分析,因此数据合并也是常用操作,主要有 concatmergejoin 三个方法,其中:concat 是 pandas 内置方法,join 是 DataFrame 类对象方法,merge 既是 pandas 内置方法也是 DataFrame 类对象方法。

  • pd.concat(objs, axis=0, join='outer', ignore_index=False, keys, levels, names, verify_integrity=False, sort=False, copy=True)
    该方法是拼接,即把多个数据拼接起来,常用参数是:
    objs:待拼接的、一个元素为 Series/DataFrame 的序列或者字典。
    axis:取 0/‘index’/,表示竖着拼接增加行;取 1/‘columns’,表示横着拼接增加列。
    join:指定拼接时如何处理其他轴上的索引,可以为 ‘inner’ 或 ‘outer’ 。
    ignore_index:是否忽略原索引,如果为 True,则拼接后索引取值为 0,1,2…

  • pd.merge(left, right, how='inner', on, left_on, right_on, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate)
    该方法根据一或者多个键将不同 DataFrame 的行连接起来,实现的是数据库的连接操作,常用参数是:
    leftright:待合并的 DataFrame 对象。若是 DataFrame 对象方法则只有right 。
    how:指定连接类型,可以是:‘left’(左连接)、‘right’(右连接)、‘outer’(外连接)、‘inner’(内连接,默认)。
    on:指定用作连接键的列的 label,必须在两个 DataFrame 中都存在,如果为None,则使用两个 DataFrame 的列 label 的交集。也可以通过 left_on/right_on 参数分别指定两侧 DataFrame 对齐的连接键。
    suffixes:一个二元序列。对于结果中同名的列,它会添加前缀来指示它们来自哪个 DataFrame。

  • df.join(other, on, how='left', lsuffix='', rsuffix='', sort=False)
    该方法是 merge 的简化版,当所有的连接键来自于某列值,则可以使用函数。
    on:指定以调用者的那个 column 对应的列为键。
    how:参考 merge 的 how 。
    lsuffic/rsuffix:参考 merge 的 suffixes,如果结果中有重名的列,则必须指定它们之一。

示例如下:

pd.concat([df1,df2,df3])  # 竖着拼接df1/df2/df3

pd.merge(df1, df2, how='left', on='c3')  # 与 df1.merge(df2, how='left', on='c3') 相同

df4 = pd.DataFrame({'c1':[-1,-2,9,-6,8],'c3':[-5,2,-1,7,1],'c4':[-3,-5,0,-2,0]})
df1.join(df4, on='c3', how='inner', lsuffix='xx', rsuffix='==')  # 使用df1的'c3'进行拼接

以上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值