数据重构

pandas包的merge、join和concat方法来完成数据的合并和拼接,merge方法主要是基于两个dataframe的共同列进行合并,join方法主要是基于两个dataframe的索引进行合并,concat方法是对series或dataframe进行行拼接或列拼接,本文详细分析了上面三种方法的合并和拼接操作。

1. Merge方法

merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None) -> 'DataFrame'

pandas的merge方法是基于共同列,将两个dataframe连接起来。下面分析merge方法的主要参数含义:

left/right:左/右位置的dataframe。

how:数据合并的方式。left:基于左dataframe列的数据合并;right:基于右dataframe列的数据合并;outer:基于列的数据外合并(取并集);inner:基于列的数据内合并(取交集);默认为'inner'。

on:用来合并的列名,这个参数需要保证两个dataframe有相同的列名。

left_on/right_on:左/右dataframe合并的列名,也可为索引,数组和列表。

left_index/right_index:是否以index作为数据合并的列名,True表示是。

sort:根据dataframe合并的keys排序,默认是。

suffixes:若有相同列且该列没有作为合并的列,可通过suffixes设置该列的后缀名,一般为元组和列表类型。

merges通过设置how参数选择两个dataframe的连接方式,有内连接,外连接,左连接,右连接,下面通过例子介绍连接的含义。

 

 

 

 

 

 

 

2. Join方法

3. concat方法

concat方法是拼接函数,有行拼接和列拼接,默认是行拼接,拼接方法默认是外拼接(并集),拼接的对象是pandas数据类型。

obj:要合并的series,dataframe或者是panel构成的序列,常将这些数据排成一个列表[data1,data2....]。
axis:按照哪个方向拼接,0是纵向拼接(默认),1是横向拼接。
join:设置合并取交集(inner)还是并集(outer)。纵向拼接时取column的交并集,横向拼接时取index的交并集。
join_axes:index的列表,仅在横向合并时使用,指明要将数据合并入哪个原表的index。
ignore_index:如果设置为true,则无视表的index,直接合并,合并后生成新的index。
keys:表标识的列表,用来区分合并的表来自哪里。

a=pd.Series([1,2,3],index=['x1','x2','x3'])
b=pd.Series([2,3,4],index=['x1','x2','x4'])
pd.concat([a,b])

x1    1
x2    2
x3    3
x1    2
x2    3
x4    4
dtype: int64


pd.concat([a,b],axis=1)

	0	1
x1	1.0	2.0
x2	2.0	3.0
x3	3.0	NaN
x4	NaN	4.0



pd.concat([a,b],keys=['fea1','fea2'])

fea1  x1    1
      x2    2
      x3    3
fea2  x1    2
      x2    3
      x4    4
dtype: int64



 加上join参数的属性,如果为’inner’得到的是两表的交集,如果是outer,得到的是两表的并集。

如果有join_axes的参数传入,可以指定根据那个轴来对齐数据 
pd.concat([df1, df4], axis=1, join_axes=[df1.index])

append

append是series和dataframe的方法,使用它就是默认沿着列进行凭借(axis = 0,列对齐)

DataFrame.append(*other*, *ignore_index=False*, *verify_integrity=False*, *sort=None*)

  • other: 是要添加的数据,可以是dataframe,dict,Seris,list等等。
  • ignore_index: 参数为True时将在数据合并后,按照0,1,2,3....的顺序重新设置索引,忽略了旧索引。
  • verify_integrity:参数为True时,如果合并的数据与原数据包含索引相同的行,将报错。

Groupby 

import numpy as np
company=['A','B','C','D']
data=pd.DataFrame({
    'company':[company[x] for x in np.random.randint(0,len(company),10)],
    'salary':np.random.randint(5,50,10),
    'age':np.random.randint(15,50,10)
})

data.groupby('company')

 

data.groupby('company').agg({'salary':'median','age':'mean'})

 

avg_salary=data.groupby('company')['salary'].mean().to_dict()
data['avg_salary']=data['company'].map(avg_salary)
data


data['avg_age']=data.groupby('company')['age'].transform('mean')
data

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据重构是一种将原始数据转换为更高维度或更低维度表示的过程。在MATLAB中,可以使用各种方法进行数据重构,例如主成分分析(PCA)和自编码器等。 在PCA中,通过计算数据的协方差矩阵,然后对协方差矩阵进行特征值分解,可以获得数据的主成分。通过选择最重要的主成分来重构数据。 自编码器是一种无监督学习算法,它可以用于数据重构。自编码器包含一个编码器和一个解码器。编码器将输入数据映射到一个低维表示,解码器将该低维表示映射回原始数据空间。 以下是在MATLAB中进行数据重构的示例代码: 1. 使用主成分分析进行数据重构: ```matlab % 假设原始数据保存在矩阵data中,每一行表示一个样本 % 使用pca函数进行主成分分析 [coeff, score] = pca(data); % 选择前k个主成分进行重构 k = 2; % 选择前2个主成分 reconstructed_data = score(:, 1:k) * coeff(:, 1:k)'; % reconstructed_data即为重构后的数据 ``` 2. 使用自编码器进行数据重构: ```matlab % 假设原始数据保存在矩阵data中,每一行表示一个样本 % 定义自编码器的网络结构 hidden_size = 2; % 设置自编码器的隐藏层大小 autoencoder = trainAutoencoder(data', hidden_size); % 使用自编码器进行数据重构 reconstructed_data = predict(autoencoder, data'); % reconstructed_data即为重构后的数据 ``` 请注意,这只是数据重构的两种常见方法,并不是唯一的方法。根据具体的问题和数据特点,可能会有其他适用的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值