pandas第五次打卡
2020-06-04 07:07
73 查看
import numpy as np import pandas as pd df = pd.read_csv('Documents/Pandas教程/joyful-pandas-master/data/table.csv') df.head()
一、append与assign
1. append方法
(a)利用序列添加行(必须指定name)
df_append = df.loc[:3,['Gender','Height']].copy() df_append
(b)用DataFrame添加表
df_temp = pd.DataFrame({'Gender':['F','M'],'Height':[188,176]},index=['new_1','new_2']) df_append.append(df_temp)
2. assign方法
该方法主要用于添加列,列名直接由参数指定:
s = pd.Series(list('abcd'),index=range(4)) df_append.assign(Letter=s) df_append.assign(col1=lambda x:x['Gender']*2, col2=s)
二、combine与update
comine方法
comine和update都是用于表的填充函数,可以根据某种规则填充
a)填充对象
可以看出combine方法是按照表的顺序轮流进行逐列循环的,而且自动索引对齐,缺失值为NaN,理解这一点很重要
df_combine_1 = df.loc[:1,['Gender','Height']].copy() df_combine_2 = df.loc[10:11,['Gender','Height']].copy() df_combine_1.combine(df_combine_2,lambda x,y:print(x,y))
b)一些例子
#例①:根据列均值的大小填充 df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}) df2 = pd.DataFrame({'A': [8, 7], 'B': [6, 5]}) df1.combine(df2,lambda x,y:x if x.mean()>y.mean() else y) #例②:索引对齐特性(默认状态下,后面的表没有的行列都会设置为NaN) df2 = pd.DataFrame({'B': [8, 7], 'C': [6, 5]},index=[1,2]) df1.combine(df2,lambda x,y:x if x.mean()>y.mean() else y) #例③:使得df1原来符合条件的值不会被覆盖 df1.combine(df2,lambda x,y:x if x.mean()>y.mean() else y,overwrite=False) #例④:在新增匹配df2的元素位置填充-1 df1.combine(df2,lambda x,y:x if x.mean()>y.mean() else y,fill_value=-1)
update
三个特点
1.返回的框索引只会与被调用框的一致(默认使用左连接,下一节会介绍)
2.第二个框中的nan元素不会起作用
3.没有返回值,直接在df上操作
例子:
# 索引完全对齐的情况 df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [400, 500, 600]}) df2 = pd.DataFrame({'B': [4, 5, 6], 'C': [7, 8, 9]}) df1.update(df2) df1
#部分填充 df1 = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': ['x', 'y', 'z']}) df2 = pd.DataFrame({'B': ['d', 'e']}, index=[1,2]) df1.update(df2) df1
# 含有缺失值不会进行填充 df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [400, 500, 600]}) df2 = pd.DataFrame({'B': [4, np.nan, 6]}) df1.update(df2) df1
四、merge与join
- merge函数
merge函数的作用是将两个pandas对象横向合并,遇到重复的索引项时会使用笛卡尔积,默认inner连接,可选left、outer、right连接
所谓左连接,就是指以第一个表索引为基准,右边的表中如果不再左边的则不加入,如果在左边的就以笛卡尔积的方式加入
merge/join与concat的不同之处在于on参数,可以指定某一个对象为key来进行连接
同样的,下面举一些例子:
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'], 'key2': ['K0', 'K0', 'K0', 'K0'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}) right2 = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'], 'key2': ['K0', 'K0', 'K0', 'K0'], 'C': ['C0', 'C1', 'C2', 'C3']}) #以key1为准则连接,如果具有相同的列,则默认suffixes=(‘_x’,’_y’): pd.merge(left,right,on='key1')
以多组键连接:
pd.merge(left,right,on=['key1','key2'])
默认使用inner连接,因为merge只能横向拼接,所以取行向上keys的交集,下面看如果使用how=outer参数
注意:这里的how就是concat的join
#左连接: pd.merge(left,right,how='left',on=['key1','key2']) #右连接: pd.merge(left,right,how='right',on=['key1','key2'])
- join函数
join函数作用是将多个pandas对象横向拼接,遇到重复的索引项时会使用笛卡尔积,默认左连接,可选inner、outer、right连接
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2']}, index=['K0', 'K1', 'K2']) right = pd.DataFrame({'C': ['C0', 'C2', 'C3'], 'D': ['D0', 'D2', 'D3']}, index=['K0', 'K2', 'K3']) left.join(right)
对于many_to_one模式下的合并,往往join更为方便:
left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'key': ['K0', 'K1', 'K0', 'K1']}) right = pd.DataFrame({'C': ['C0', 'C1'], 'D': ['D0', 'D1']}, index=['K0', 'K1']) left.join(right,on='key')
多层key:
left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1']}) index = pd.MultiIndex.from_tuples([('K0', 'K0'), ('K1', 'K0'), ('K2', 'K0'), ('K2', 'K1')],names=['key1','key2']) right = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}, index=index) left.join(right,on=['key1','key2'])
相关文章推荐
- 第1章 Pandas基础打卡
- 【Python有趣打卡】利用pandas完成数据分析项目(一)
- 【Python有趣打卡】利用pandas完成数据分析项目(二)——爬微信好友+分析
- 第五次打卡:卷积神经网络基础;leNet;卷积神经网络进阶
- 第五次上机报告
- 使用Pandas实现SQL基本操作
- 第五次假账克星NO.1
- Python 笔记 #17# Pandas: Merge
- python科学计算一:pandas
- 用pandas清洗数据具体步骤(基础篇二)
- 4月20日 疯狂猜成语-----第五次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜
- Pandas学习(五)--Pandas学习视频
- 打卡17-perl 子函数
- python中pandas模块(join方法)实现SQL Server中的表关联join
- Mapping Data in Python with Pandas and Vincent
- python – 基于pandas中的列中的值从DataFrame中选择行
- 北京航空航天大学2014第五次上机解题报告
- 【自用】 pandas 读取 CSV 文件
- Hadoop学习第五次:HDFS的Shell命令
- 程序小白天天打卡(java继承以及方法的重写)