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

相关文章

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Java 连接Sql sever 2008

Java 连接Sql sever 2008 /Sql sever 2008 R2 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TestJDBC