Pandas-高级处理(二):连接与修补【concat(参数:axis、join、keys)、combine_first(根据index,df1的空值被df2替代)】

本文主要是介绍Pandas-高级处理(二):连接与修补【concat(参数:axis、join、keys)、combine_first(根据index,df1的空值被df2替代)】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、连接(concat):沿轴执行连接操作

pd.concat([data1, data2], axis=1):按照行或列进行连接操作:

  • axis=0为列索引;
  • axis=1为行索引;

比如我们将刚才处理好的one-hot编码与原数据连接

1、参数:axis

import pandas as pd# 连接:concats1 = pd.Series([1, 2, 3])
s2 = pd.Series([2, 3, 4])s3 = pd.Series([1, 2, 3], index=['a', 'c', 'h'])
s4 = pd.Series([2, 3, 4], index=['b', 'e', 'd'])print("s1 = \n", s1)
print('-' * 50)
print("s2 = \n", s2)
print('-' * 50)
print("s3 = \n", s3)
print('-' * 50)
print("s4 = \n", s4)
print('-' * 200)# 默认axis=0,行+行
data1 = pd.concat([s1, s2])
print("data1 = pd.concat([s1,s2]) = \n", data1)
print('-' * 200)data2 = pd.concat([s3, s4]).sort_index()
print("data2 = pd.concat([s3,s4]).sort_index() = \n", data2)
print('-' * 200)# axis=1,列+列,成为一个Dataframe
data3 = pd.concat([s3, s4], axis=1)
print("data3 = pd.concat([s3,s4], axis=1) = \n", data3)
print('-' * 200)

打印结果:

s1 = 0    1
1    2
2    3
dtype: int64
--------------------------------------------------
s2 = 0    2
1    3
2    4
dtype: int64
--------------------------------------------------
s3 = a    1
c    2
h    3
dtype: int64
--------------------------------------------------
s4 = b    2
e    3
d    4
dtype: int64
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
data1 = pd.concat([s1,s2]) = 0    1
1    2
2    3
0    2
1    3
2    4
dtype: int64
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
data2 = pd.concat([s3,s4]).sort_index() = a    1
b    2
c    2
d    4
e    3
h    3
dtype: int64
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
data3 = pd.concat([s3,s4], axis=1) = 0    1
a  1.0  NaN
c  2.0  NaN
h  3.0  NaN
b  NaN  2.0
e  NaN  3.0
d  NaN  4.0
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Process finished with exit code 0

2、参数:join

import pandas as pd# 连接方式:joins5 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s6 = pd.Series([2, 3, 4], index=['b', 'c', 'd'])
print("s5 = \n", s5)
print('-' * 50)
print("s6 = \n", s6)
print('-' * 200)data1 = pd.concat([s5, s6], axis=1)
print("data1 = pd.concat([s5,s6], axis= 1) = \n", data1)
print('-' * 200)# join:{'inner','outer'},默认为“outer”。如何处理其他轴上的索引。outer为联合和inner为交集。
data3 = pd.concat([s5, s6], axis=1, join='inner')
print("data3 = pd.concat([s5,s6], axis= 1, join='inner') = \n", data3)
print('-' * 200)

打印结果:

s5 = a    1
b    2
c    3
dtype: int64
--------------------------------------------------
s6 = b    2
c    3
d    4
dtype: int64
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
data1 = pd.concat([s5,s6], axis= 1) = 0    1
a  1.0  NaN
b  2.0  2.0
c  3.0  3.0
d  NaN  4.0
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
data3 = pd.concat([s5,s6], axis= 1, join='inner') = 0  1
b  2  2
c  3  3
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Process finished with exit code 0

3、参数:keys

import pandas as pd# 连接方式:joins5 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s6 = pd.Series([2, 3, 4], index=['b', 'c', 'd'])
print("s5 = \n", s5)
print('-' * 50)
print("s6 = \n", s6)
print('-' * 200)# 覆盖列名
# keys:序列,默认值无。使用传递的键作为最外层构建层次索引
sre1 = pd.concat([s5, s6], keys=['one', 'two'])
print("sre1 = \n{0} \ntype(sre1) = {1}".format(sre1, type(sre1)))
print('-' * 50)
print("sre.index = \n", sre1.index)
print('-' * 200)# axis = 1, 覆盖列名
sre2 = pd.concat([s5, s6], axis=1)
print("sre2 = \n{0} \ntype(sre2) = {1}".format(sre2, type(sre2)))
print('-' * 50)
sre3 = pd.concat([s5, s6], axis=1, keys=['one', 'two'])
print("sre3 = \n{0} \ntype(sre3) = {1}".format(sre3, type(sre3)))

打印结果:

s5 = a    1
b    2
c    3
dtype: int64
--------------------------------------------------
s6 = b    2
c    3
d    4
dtype: int64
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sre1 = 
one  a    1b    2c    3
two  b    2c    3d    4
dtype: int64 
type(sre1) = <class 'pandas.core.series.Series'>
--------------------------------------------------
sre.index = MultiIndex([('one', 'a'),('one', 'b'),('one', 'c'),('two', 'b'),('two', 'c'),('two', 'd')],)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sre2 = 0    1
a  1.0  NaN
b  2.0  2.0
c  3.0  3.0
d  NaN  4.0 
type(sre2) = <class 'pandas.core.frame.DataFrame'>
--------------------------------------------------
sre3 = one  two
a  1.0  NaN
b  2.0  2.0
c  3.0  3.0
d  NaN  4.0 
type(sre3) = <class 'pandas.core.frame.DataFrame'>Process finished with exit code 0

二、修补(combine_first)

  • 根据index,df1的空值被df2替代

  • 如果df2的index多于df1,则更新到df1上,比如index=[‘a’,1]

  • update,直接df2覆盖df1,相同index位置

import numpy as np
import pandas as pd# 修补 pd.combine_first()df1 = pd.DataFrame([[np.nan, 3., 5.], [-4.6, np.nan, np.nan], [np.nan, 7., np.nan]])
df2 = pd.DataFrame([[-42.6, np.nan, -8.2], [-5., 1.6, 4]], index=[1, 2])
df3 = pd.DataFrame([[-42.6, np.nan, -8.2], [-5., 1.6, 4]], index=['a', 1])
print("df1 = \n", df1)
print('-' * 50)
print("df2 = \n", df2)
print('-' * 200)# 根据index,df1的空值被df2替代
data1 = df1.combine_first(df2)
print("data1 = \n", data1)
print('-' * 200)# 如果df2的index多于df1,则更新到df1上,比如index=['a',1]
data2 = df1.combine_first(df3)
print("data2 = \n", data2)
print('-' * 200)# update,直接df2覆盖df1,相同index位置
df1.update(df2)
print("df1 = \n", df1)

打印结果:

df1 = 0    1    2
0  NaN  3.0  5.0
1 -4.6  NaN  NaN
2  NaN  7.0  NaN
--------------------------------------------------
df2 = 0    1    2
1 -42.6  NaN -8.2
2  -5.0  1.6  4.0
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
data1 = 0    1    2
0  NaN  3.0  5.0
1 -4.6  NaN -8.2
2 -5.0  7.0  4.0
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
data2 = 0    1    2
0   NaN  3.0  5.0
1  -4.6  1.6  4.0
2   NaN  7.0  NaN
a -42.6  NaN -8.2
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
df1 = 0    1    2
0   NaN  3.0  5.0
1 -42.6  NaN -8.2
2  -5.0  1.6  4.0Process finished with exit code 0

这篇关于Pandas-高级处理(二):连接与修补【concat(参数:axis、join、keys)、combine_first(根据index,df1的空值被df2替代)】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128673

相关文章

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

Xshell远程连接失败以及解决方案

《Xshell远程连接失败以及解决方案》本文介绍了在Windows11家庭版和CentOS系统中解决Xshell无法连接远程服务器问题的步骤,在Windows11家庭版中,需要通过设置添加SSH功能并... 目录一.问题描述二.原因分析及解决办法2.1添加ssh功能2.2 在Windows中开启ssh服务2

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或