Pandas玩转数据

Pandas玩转数据

一、排序功能

0x1 Series的排序

s1 = Series(np.random.randn(10))  
s2 = s1.sort_values(ascending=False)  # 按照值降序排列
s2.sort_index()    # 按照索引升序排列

0x2 Dataframe的排序

df1 = DataFrame(np.random.randn(40).reshape(8,5), columns=['A','B','C','D','E'])

df1['A'].sort_values()      # 升序排列A列,返回一个Series
f2 = df1.sort_values('A')   # 按照A列顺序排列,返回一个Dataframe 
df2.sort_index()            # 按照索引排列

二、Index重命名

df1 = DataFrame(np.arange(9).reshape(3,3), index=['BJ','SH','GZ'], columns=['A','B','C'])

df1.index = Series(['bj','sh','gz'])  # 通过series重命名
df1.index = df1.index.map(str.upper)  # 通过map函数重命名
df1.rename(index=str.lower, columns=str.lower)  # 返回一个新Dataframe
df1.rename(index={'BJ': 'beijing'}, columns={"A":'a'})  # 通过字典重命名

写自己的Map函数

def test_map(x):
    return x + '_ABC'
    
df1.index.map(test_map)     # 调用函数重命名
df1.rename(index=test_map)

三、Merge操作

df1 = DataFrame({'key':['X','Y','Z','X'], 'data_set_1':[1,2,3,4]})
df2 = DataFrame({'key':['X','B','C'], 'data_set_2':[4,5,6]})


pd.merge(df1,df2)
pd.merge(df1,df2,on=None)

on参数可以指定merge的列名,没有on参数意思为on=None

dataframe的merge是按照两个dataframe共有的column进行连接,两个dataframe必须具有同名的column。 如果两个dataframe的column都不相同,则会在merge的时候报错。

而当两个dataframe具有相同的column时,若两个column中没有相同的value,则会merge一个空的dataframe。

how参数用于指定merge时的操作。

pd.merge(df1,df2, on='key',how='inner')

指定how=left,就是让df1保留所有的行列数据,df2根据df1的行列进行补全。同理,right也可以指定。outer就是how指定为left和right的结果的集合

pd.merge(df1, df2, on='key', how='left')
pd.merge(df1,df2, on='key', how='right')
pd.merge(df1,df2, on='key', how='outer')

四、Concatenate和Combine操作

0x1 Concatenate 连接

Series中矩阵(array)的连接

最终形成一个新的矩阵,大小为3列6行。其实就是将arr2连接到了arr1的下面。
更改连接方式
其中有一个参数:axis,默认为0,表示按列连接(增加行数),即将第二个矩阵的列依次连接到第一个矩阵的列的下面。如果axis=1,表示按行连接(增加列数)。

Series的连接

注意,这里使用的是pandas的方法concat,因为上边使用的numpy的concatenate方法不能讲index进行连接,只能连接values,如下:

更改连接方式
同样的,也有一个axis的参数,默认为0。当指定axis=1时,将增加列,即将形成一个dataframe,没有的值将会填充为NaN

Dataframe的连接

没有值的地方将会填充为NaN

0x2 Combine 填充,补充

从结果可看出,s1用s2中的值填充了其中对应为NaN的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值