本记录为本人参加datawhale数据分析(泰坦尼克号任务项目)学习笔记,不足之处多多指教。
数据重构
一、数据拼接合并
pandas中的merge,concat,join,aptend
1 、merge函数类似数据库中的
(1)内连接,pd.merge(a1, a2, on=‘key’)
(2)左连接,pd.merge(a1, a2, on=‘key’, how=‘left’)
(3)右连接,pd.merge(a1, a2, on=‘key’, how=‘right’)
(4)外连接, pd.merge(a1, a2, on=‘key’, how=‘outer’)
注意:
如果 on 有两个条件,on = [‘a’,‘b’] ;how = ‘left’,‘right’,‘outer’
2、append,相当于R中的rbind
data1.append(data2,ignore_index = True)
注意: ignore_index = True:这个时候 表示index重新记性排列,而且这种方法是复制一个样本
3、join
data2.columns=list(‘pown’)
result = data1.join(data2)
注意: 列名不能重叠,在这里的用法和R中rbind很像,但是join的用法还是相对麻烦的
4、concat函数是pandas底下的方法,可以把数据根据不同的轴进行简单的融合
pd.concat(objs, axis=0, join=‘outer’, join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False,
copy=True)
参数含义
objs:Series,DataFrame或Panel对象的序列或映射。如果传递了dict,则排序的键将用作键参数,除非它被传递,在这种情况下,将选择值(见下文)。任何无对象将被静默删除,除非它们都是无,在这种情况下将引发一个ValueError。
axis:{0,1,…},默认为0。沿着连接的轴。0-行,1-列
join:{‘inner’,‘outer’},默认为“outer”。如何处理其他轴上的索引。outer为并集、inner为交集。
ignore_index:boolean,default False。如果为True,请不要使用并置轴上的索引值(重置索引值)。结果轴将被标记为0,…,n-1。如果要连接其中并置轴没有有意义的索引信息的对象,这将非常有用。注意,其他轴上的索引值在连接中仍然受到尊重。
join_axes:Index对象列表。用于其他n-1轴的特定索引,而不是执行内部/外部设置逻辑。
keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。
levels:序列列表,默认值无。用于构建MultiIndex的特定级别(唯一值)。否则,它们将从键推断。
names:list,default无。结果层次索引中的级别的名称。
verify_integrity:boolean,default False。检查新连接的轴是否包含重复项。这相对于实际的数据串联可能是非常昂贵的。
copy:boolean,default True。如果为False,请勿不必要地复制数据。
二、数据重排
在用pandas进行数据重排时,经常用到stack和unstack两个函数。stack的意思是堆叠,堆积,unstack即“不要堆叠”,我对两个函数是这样理解和区分的。
常见的数据的层次化结构有两种,一种是表格,一种是“花括号”,即下面这样的l两种形式:
表格在行列方向上均有索引(类似于DataFrame),花括号结构只有“列方向”上的索引(类似于层次化的Series),结构更加偏向于堆叠(Series-stack,方便记忆)。stack函数会将数据从”表格结构“变成”花括号结构“,即将其行索引变成列索引,反之,unstack函数将数据从”花括号结构“变成”表格结构“,即要将其中一层的列索引变成行索引。例:
#表格变成列
data2=data.stack()
#列表成表格
data3=data2.unstack()
三、数据聚合与运算
groupby机制
groupby:分割,应用和组合,简单说分组计算。groupby经常只需一行代码,就可以计算每组的和,均值,计数,最小值以及其他累计值。它返回一个DataFrameGroupby对象,你可以将它看成是一个特殊的DataFrame对象,里面隐藏着若干组数据。
1、按列取值:Groupby对象按列取值,并返回一个修改过的Groupby对象。
df.groupby('key1')['data1'].sum()
2、按组迭代:返回的每一组都是Series或FataFrame:
for k1, k2 in df.groupby(['key1', 'key2']):
print(k1, k2)
3、调用方法:直接调用Python的一些方法
df.groupby(['key1', 'key2']).describe()
agg函数
python中的agg函数通常用于调用groupby()函数之后,对数据做一些聚合操作,包括sum,min,max以及其他一些聚合函数
df_agg = df.groupby('Country').agg(['min', 'mean', 'max'])
text.groupby('Sex').agg({'Fare': 'mean', 'Pclass': 'count'}).rename(columns=
{'Fare': 'mean_fare', 'Pclass': 'count_pclass'})