当前位置 主页 > 服务器问题 > Linux/apache问题 >
import numpy as np import pandas as pd df1 = pd.DataFrame( {'key1':list('abcdefgh'),'data1':np.random.randint(-5,10,8)} ) df2 = pd.DataFrame( {'key2':list('defgh'),'data2':np.random.randint(-5,10,5)} ) print(df1) print(df2) print('--------------------------') # todo 链接 # print(pd.merge(df1,df2,on='key'))# key相同时 通过key连接df1,df2 # print(pd.merge(df1,df2))#不指定,连接df1,df2默认通过相同的列来连接 # print(pd.merge(df1,df2,on=data1))#data1相同时 通过data1连接df1,df2 #todo 交集 print(pd.merge(df1,df2,left_on='key1',right_on='key2')) #todo 并集 print(pd.merge(df1,df2,how='outer',left_on='key1',right_on='key2')) #todo 左连接 print(pd.merge(df1,df2,how='left',left_on='key1',right_on='key2')) #todo 右连接 print(pd.merge(df1,df2,how='right',left_on='key1',right_on='key2')) # todo 通过行索引来指定 print(pd.merge(df1,df2,left_on='data1',right_index=True))#left_on指定左表的列索引为外健,right_index作业为右表的行索引作为外检 print(pd.merge(df1,df2,left_index=True,right_index=True))#left_index,right_index,默认的情况下,将两张表按照航索引的相同情况,合成一条数据 print(pd.merge(df1,df2,how='left',left_index=True,right_index=True))# 按照行进行连接,也能指定链接方式
注意点:
1.how = inner,默认的,内连接,多表的交集
2.how = outer,外连接,多表的并集
3.how = left,指定为左连接,展示左表的完整数据,不管右表有没有匹配
4.how = right,指定为右连接,展示右表的完整数据,不管左表有没有匹配
import numpy as np import pandas as pd # todo np数组的合并 np.concatenate() ,参与合并的数组,纬度大小是一致的,axis=1 为行排序 # arr1 = np.random.randint(10,20,(3,4)) # arr2 = np.random.randint(10,20,(3,4)) # print(arr1) # print(arr2) # print('-------------') # print(np.concatenate((arr1,arr2),axis=0)) #列合并 # print('----------') # print(np.concatenate((arr1,arr2),axis=1)) # 行合并 # todo pd的合并 pd.concat() # ser1 = pd.Series(np.random.randint(10,20,3)) # ser2 = pd.Series(np.random.randint(10,20,5)) # ser3 = pd.Series(np.random.randint(10,20,7)) # print(ser1) # print(ser2) # print(ser3) # print('-------------') # # print(pd.concat([ser1,ser2,ser3]))#多个Serise 对象需要用【】包起来,默认是列合并 # print(pd.concat([ser1,ser2,ser3],axis=1))# axis=1 行合并 ,不够的部分用NAN填充 # print(pd.concat([ser1,ser2,ser3],axis=1,join='outer'))# 默认是outer 并集 df1 = pd.DataFrame( {'key1':list('abcdefgh'),'data1':np.random.randint(-5,10,8)} ) df2 = pd.DataFrame( {'key2':list('abcde'),'data2':np.random.randint(-5,10,5)} ) print(pd.concat((df1,df2)))# 默认按照列合并 print(pd.concat((df1,df2),axis=1))# 按照行合并 print(pd.concat((df1,df2),axis=1,join='inner'))# 交集合并
import pandas as pd import numpy as np df1 = pd.DataFrame( {'key1':list('abcdefgh'),'data1':np.random.randint(-5,10,8),'key2':list('11223344'),'data2':np.random.randint(-5,10,8)} ) print(df1) df2 = pd.DataFrame( {'key2':list('abcde'),'data2':np.random.randint(-5,10,5)} ) print('----------------') # todo 分组 groupby() group_obj = df1.groupby(by='key2')#通过key1进行分组,返回一个分组对象,分组之后可以用函数进行下一步处理,计算过程中,非数字的数据不参与计算 # print(group_obj) # print('--------rrrr-------') # print(group_obj.sum()) # 分组求和 # print(group_obj.mean()) # 分组求均值 # print(group_obj.size()) # 每个分组的元素个数 # print(group_obj.count()) # 每个分组之后,列名里面的个数 # # # todo 迭代分组对象 注意点:1.每一个元素形式(分组名,属于分组的数据)2.属于该分组的数据,也是dataframe对象 # for i in group_obj: # print(i) # print('----------') # # todo 迭代分组对象的拆分 # for name,data in group_obj: # print('---') # print(name) # print(data) # # # todo 分组对象转列表 # print(list(group_obj)) # # todo 分组对象转字典 # print(dict(list(group_obj))) # # # # # # todo 聚合(数组产生标量的过程,常常用于分组之后的数据运算) # # todo 内置的聚合函数 # # todo sum() 求和 # # todo mean()平均值 # # todo size() # # todo max() # # todo min() # # todo count # # print(group_obj.describe()) #查看具体的聚合数据 # todo 使用单个内置函数 # print(group_obj.agg('max'))#agg里面可以填写内置函数,如果需要使用内置的函数,要用字符串的形式填写 # print(group_obj.agg('min')) # # todo 使用多个内置函数 # print(group_obj.agg(['max','min','mean']))#需要用列表的形式 # # todo 使用内置的函数取中文别名 # print(group_obj.agg([('最大值','max'),('最小值','min'),('均值','mean')]))# 第一个参数是别名 # todo 自定义函数 def print1(x): # print(x) ret = x.max()-x.min() return ret print(group_obj.agg([('差值',print1)])) # todo 匿名函数 print(lambda x:x.max()-x.min()) # todo data1求最大值,data2 求最小值 不同的列用不同的函数 print(group_obj.agg( { 'data1':['max'], 'data2':[('最小值','min')] }))