1.合并数据集
①索引上的合并
merge()函数的参数
参数 | 说明 |
---|---|
left | 参与合并的左边的DataFrame |
right | 参与合并的右边的DataFrame |
how | 连接方式,类似于数据库"inner""outer"left""right",默认是"inner" |
on | 用于连接的列名,未指定的话,以left和right列名的交集作为连接键 |
left_on | 左侧DataFrame中用作连接键的列 |
right_on | 右侧DataFrame中用作连接键的列 |
left_index | 将左侧的行索引用作连接键的列 |
right_index | 类似于left_index |
sort | 合并后排序,默认是true,可以设置禁用 |
copy | 设置为False,可以在某些特殊情况下避免将数据结果复制到结果数据结构中,默认总是复制 |
另外df对象还有join()方法,可以更方便地按索引合并。
②轴向连接
通过join_axes指定要在其他轴上使用的索引
在连接轴上创建一个层次化索引,来区分不同的片段
如果沿着axis=1方向进行合并,则keys就会成为DataFrame的列头
concat()函数的参数
参数 | 说明 |
---|---|
objs | 参与连接的pandas对象,唯一必须的参数 |
axis | 指明连接的轴向 |
join | "inner"/"outer".指明其他轴上的索引是按交集还是并集合并 |
join_axes | 指明用于其他n-1条轴的索引,不执行并集/交集运算 |
keys | 在连接轴上创建一个层次化索引,来区分不同的片段 |
levels | 指定用作层次化索引各级别上的索引,前提是设置了keys |
names | 用于创建分层级别的名称,前提是设置了keys/levels |
verify_integrity | 检测结果对象新轴上的重复情况,默认(False)允许重复 |
ignore_index | 不保留连接轴上的索引,产生一组新索引range(len) |
③合并重叠数据
对于索引全部或部分重叠的两个数据集
np.where(pd.isnull(a),b,a)
df1.combine_first(df2)
2.重塑和轴向旋转
①重塑层次化索引
stack():将数据的列“旋转”为行
unstack():将数据的行“旋转”为列
unstack操作的是最内层
②将“长格式”旋转为“宽格式”
将关系型数据库里的某个属性作为行索引或列索引,创建DataFrame对象
pivoted=ldata.pivot('date','item','value')
date列作为行索引
item列作为列索引
value是填充值
另外ldata.set_index(['date','item']).unstack('item')也可以实现
3.数据转换
①移除重复数据
data.duplicated()返回布尔型的Series,表示各行是否重复
data.drop_duplicates()返回一个移除了重复行的DataFrame
data.drop_duplicates(['key1'])根据key1列过滤重复行,相同的行默认留下第一次出现的行,传入take_last=True则保留最后一个
②利用函数或映射进行数据转换
Series的map()方法可以接受一个函数或含有映射关系的字典型对象
data['food'].map(lambda x:meat_to_animal[x.lower()])
③替换值
data.replace(-999,np.nan)
data.replace([-999,-1000],np.nan)
data.repace([-999,-1000],[np.nan,0])
data.replace({-999:np.nan,-1000:0})
④重命名轴索引
data.index=data.index.map(str.upper)
data.rename(index=str.title,columns=str.upper)
data.rename(index={'mm':'ss'},columns={'yy':'xx'})
传入才能inplace=True就地修改数据集,不然都是副本
⑤离散化和面元划分
cut()和qcut()的区别是:cut()根据最大值最小值计算等长面元,qcut()使用的是样本分位数
⑥检测和过滤异常值
选出全部含有“超过3或-3的值”的行:data[(np.abs(data)>3).any(1)]
将值限制在-3到3之间:data[np.abs(data)>3]=np.sign(data)*3
其中data是DataFrame对象
⑦计算指标/哑变量
DataFrame的某一列中含有k个不同的值,则可以派生出一个k列矩阵或DataFrame,其值全为0或1。
网友评论