pandas基础操作大全之数据合并

论坛 期权论坛     
选择匿名的用户   2021-5-28 02:12   0   0
<p>在<a href="https://blog.csdn.net/yifengchaoran/article/details/110334784">pandas 基础操作大全之数据读取&amp;清洗&amp;分析</a>中介绍了pandas常见的数据处理操作,现在继续对pandas常用的数据合并操作做下介绍,便于大家快速了解,也方便后续需要时快速查询。</p>
<h1>一、 concat--数据合并</h1>
<h2>1.1 概述</h2>
<pre class="blockcode"><code class="language-python">#pandas 的 concat函数表达式如下
pd.concat(
    [df1, df2, df3],  #指定需合并的两个或多个Dataframe,各个df的shape可以不同
    axis &#61; 0, #指定合并时,合并的轴方向,默认为0,即行合并,多个df会在纵向进行拼接合并
    join &#61; &#39;outer&#39;, #指定在合并轴方向的另外一个轴方向,标签如何合并,outer指取并集,inner指取交集
    ignore_index &#61; False, #指定是否保留原各个df在合并轴方向上的原有标签,默认False,即保留
    keys &#61; [&#39;a&#39;,&#39;b&#39;,&#39;c&#39;], #为合并后的数据,在合并轴方向上指定新的index,便于区分各个合并数据源
    names &#61; [&#39;groupA&#39;,&#39;groupB&#39;], #为
    verify_integrity &#61; False, #指定是否允许在指定的合并轴方向上,允许存在重复的标签,默认值为False,即允许,当指定为True时,如果有重复,在合并的时候会报错
)
</code></pre>
<h2>1.2 指定合并的轴方向--axis</h2>
<pre class="blockcode"><code class="language-python">#一般情况下,基本是在行方向将多个DataFrame进行连接合并,组成一个新的DataFrame,便于统一进行处理
#常见的应用场景,比如多个DataFrame可能有部分相同的列,希望连在一起,分析其规律
#df1数据源如下:
A         B         C
0 0.214326 0.818321 -0.055211
1 -0.941666 2.396083 2.173411
#df2数据源如下:
A         B
0 0.397919 -0.350948
1 0.147547 -0.172974
pd.concat([df1 , df2], axis&#61;0)  #运算结果如下
A         B         C
0 -0.663727 1.883112 -0.409361
1 0.874930 -0.120000 0.015474
0 0.380397 -1.088665 NaN
1 -1.623468 0.610855 NaN

pd.concat([df1 , df2], axis&#61;1) #运算结果如下
    A         B         C         A         B
0 -0.663727 1.883112 -0.409361 0.380397 -1.088665
1 0.874930 -0.120000 0.015474 -1.623468 0.610855</code></pre>
<h2>1.3 指定合并轴另外一个轴标签是否合并--join</h2>
<pre class="blockcode"><code class="language-python">#一般直接使用join的默认值,即outer,取并集,此时不会丢弃多个DataFrame的任何列信息
#当然,如果想合并时,最后只留下多个DataFrame相同的列或行标签,则使用inner取交集
#df1数据源如下:
A         B         C
0 0.214326 0.818321 -0.055211
1 -0.941666 2.396083 2.173411
#df2数据源如下:
A         B
0 0.397919 -0.350948
1 0.147547 -0.172974
pd.concat([df1 , df2], join &#61; &#39;outer&#39;)  #运算结果如下
A         B         C
0 -0.663727 1.883112 -0.409361
1 0.874930 -0.120000 0.015474
0 0.380397 -1.088665 NaN
1 -1.623468 0.610855 NaN

pd.concat([df1 , df2], join &#61; &#39;inner&#39;)  #运算结果如下
    A         B
0 -0.663727 1.883112
1 0.874930 -0.120000
0 0.380397 -1.088665
1 -1.623468 0.610855</code></pre>
<h2>1.4 指定合并轴原标签是否需要变化--ignore_index</h2>
<pre class="blockcode"><code class="language-python">#该参数在希望对行进行遍历处理时,会比较有用,因为可以设置忽略合并轴方向之前的index或标签,重新进行生成,就像是一个全新的DataFrame一样
#df2数据源如下:
A         B         C
0 0.214326 0.818321 -0.055211
1 -0.941666 2.396083 2.173411
#df2数据源如下:
A         B
0 0.397919 -0.350948
1 0.147547 -0.172974

pd.concat([df1,df2],ignore_index&#61;True) #运算结果如下
    A         B         C
0 -0.663727 1.883112 -0.409361
1 0.874930 -0.120000 0.015474
2 0.380397 -1.088665 NaN
3 -1.623468 0.610855 NaN

pd.concat([df1,df2],ignore_index&#61;False) #运算结果如下
A         B         C
0 -0.663727 1.883112 -0.409361
1 0.874930 -0.120000 0.015474
0 0.380397 -1.088665 NaN
1 -1.623468 0.610855 NaN
</code></pre>
<h2>1.5 指定合并轴方向新的index,便于区分数据--keys</h2>
<p>该参数类似于分组的效果</p>
<pre class="blockcode"><code class="language-python">#该参数类似分组的效果,即沿着合并轴方向,按照合并的数据源,进行分组,便于区分合并数据来源
#df1数据源如下:
A         B         C
0 0.214326 0.818321 -0.055211
1 -0.941666 2.396083 2.173411
#df2数据源如下:
A         B
0 0.397919 -0.350948
1 0.147547 -0.172974

pd.concat([df1,df2],keys&#61;[&#39;a&#39;,&#39;b&#39;])  #运算结果如下
  A         B         C
a 0 -0.663727 1.883112 -0.409361
    1 0.874930 -0.120000 0.015474
b 0 0.380397 -1.088665 NaN
    1 -1.623468 0.610855 NaN</code></pre>
<h2>1.6 指定合并轴方向新的index 的含义名称,一般和keys一起使用,让合并后的数据更直观--names</h2>
<pre class="blockcode"><code class="language-python">#该参数一般与keys一起使用,比如df1和df2是两个季度前两个月的数
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP