<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pandas技巧,數(shù)據(jù)合并

          共 5211字,需瀏覽 11分鐘

           ·

          2022-11-17 09:55

          本文介紹的是3個Pandas函數(shù)的使用,主要是用于DataFrame的數(shù)據(jù)更新或者合并

          • combine
          • update
          • combine_first

          導入庫

          import pandas as pd
          import numpy as np

          combine

          DataFrame.combine(
              other, # 另個DataFrame
              func,  # 拼接時使用的函數(shù),可以是自定義的函數(shù),也可以是Python或者numpy內(nèi)置函數(shù)
              fill_value=None#  缺失值填充處理
              overwrite=True)  # 是否覆寫

          案例1

          df1 = pd.DataFrame({'A': [10], 'B': [43]})
          df2 = pd.DataFrame({'A': [11], 'B': [23]})
          df1

          AB
          014
          103
          df2

          AB
          012
          113
          # 合并1:使用自定義函數(shù)

          df1.combine(df2, lambda s1,s2: s1 if s1.sum() > s2.sum() else s2)

          AB
          014
          113

          解釋1:每個Series求和再進行比較,取出較大的那個Series

          # 合并2:使用內(nèi)置函數(shù)

          df1.combine(df2, np.minimum) 

          AB
          012
          103

          解釋2:每個位置上對應的元素進行比較,取出較小者

          案例2

          df3 = pd.DataFrame({'A': [np.nan, 0], 'B': [43]})
          df4 = pd.DataFrame({'A': [np.nan, 1], 'B': [2, np.nan]})
          df3

          AB
          0NaN4
          10.03
          df4

          AB
          0NaN2.0
          11.0NaN
          # 解釋參數(shù)fill_value

          # 缺失值填充8
          df3.combine(df4, np.minimum,fill_value=8

          AB
          08.02.0
          10.03.0

          在進行比較的時候,是兩個DataFrame相同的位置同時為空值才會進行指定值的填充; 如果只有一個DataFrame為空值,那么結(jié)果就是非空值

          案例3

          參數(shù)overwrite的使用:

          If True, columns in self that do not exist in other will be overwritten with NaNs.

          中文意思就是:如果某個屬性字段在本身的DataFrame中存在,但是在另一個中不存在,那么合并的時候,如果overwrite=True,就會用NaN代替。

          df5 = pd.DataFrame({'A': [00], 'B': [43]})

          df6 = pd.DataFrame({'B': [23],'C':[5,6]}, 
                             index=[1,2]  # 指定行索引,默認從0開始的自然數(shù)
                            )
          df5

          AB
          004
          103
          df6

          BC
          125
          236
          # 默認情況

          df5.combine(df6, lambda s1,s2: s1 if s1.sum() > s2.sum() else s2)

          ABC
          0NaN4.0NaN
          1NaN3.05.0
          2NaNNaN6.0
          # 使用參數(shù)overwrite

          df5.combine(df6, lambda s1,s2: s1 if s1.sum() > s2.sum() else s2, overwrite=False)

          ABC
          00.04.0NaN
          10.03.05.0
          2NaNNaN6.0

          update

          DataFrame.update(
              other, # 另一個合并的數(shù)據(jù)
              join='left'# 默認是保留left中的全部信息
              overwrite=True# 是否覆寫
              filter_func=None# 過濾函數(shù)
              errors='ignore')  # 異常報錯處理

          案例1

          df7 = pd.DataFrame({'A': [123],
                             'B': [405060]})

          df8 = pd.DataFrame({'B': [456],
                              'C': [789]})
          df7

          AB
          0140
          1250
          2360
          df8

          BC
          047
          158
          269
          df7.update(df8)  
          df7

          AB
          014
          125
          236
          df8

          BC
          047
          158
          269

          合并之后我們發(fā)現(xiàn):

          • df7已經(jīng)原地修改,發(fā)生了變化
          • df8是沒有變化的

          案例2

          df9 = pd.DataFrame({'A': [12],
                             'B': [4050]})  # 長度為2

          df10 = pd.DataFrame({'B': [456],  # 長度為3
                              'C': [789]})
          df9.update(df10)  
          df9  

          AB
          014.0
          125.0

          從結(jié)果中能夠看到,只會保留最小長度的值

          案例3

          df11 = pd.DataFrame({'A': [123],
                             'B': [405060]})  # 長度為2

          s = pd.Series([7,8],name="B", index=[0,2])
          df11

          AB
          0140
          1250
          2360
          s
          0    7
          2 8
          Name: B, dtype: int64
          df11.update(s)
          df11

          AB
          017.0
          1250.0
          238.0
          s1 = pd.Series([6,9],name="A", index=[0,1])
          df11.update(s1)
          df11

          AB
          06.07.0
          19.050.0
          23.08.0

          案例4

          存在空值的情況

          df12 = pd.DataFrame({'A': [123],
                             'B': [405060]})

          df13 = pd.DataFrame({'B': [4, np.nan, 6],
                              'C': [789]})
          df12

          AB
          0140
          1250
          2360
          df13

          BC
          04.07
          1NaN8
          26.09
          df12.update(df13)
          df12

          AB
          014.0
          1250.0
          236.0

          combine_first

          DataFrame.combine_first(other)

          合并兩個數(shù)據(jù)中某個位置第一次出現(xiàn)的元素;如何其中數(shù)據(jù)不存在,用空值NaN代替

          df13 = pd.DataFrame({'A': [None0], 'B': [4None]})

          df14 = pd.DataFrame({'B': [33], 'C': [11]}, index=[12])
          df13

          AB
          0NaN4.0
          10.0NaN
          df14

          BC
          131
          231
          df13.combine_first(df14)

          ABC
          0NaN4.0NaN
          10.03.01.0
          2NaN3.01.0

          上面結(jié)果的解釋:

          • A:0號位置的元素出現(xiàn)在df13中為NaN,1號位置的元素也是出現(xiàn)在df13的A列中;2號為A列是沒有的,用NaN代替
          • B:0號為的元素第一次在df13的B列,1和2號為都在df14的B列中
          • C:0號位置沒有元素,用NaN代替;1和2號位置都是出現(xiàn)在df14中


          --End--

          1、想領(lǐng)取贈書,加我微信,朋友圈不定期送書;

          2、想咨詢學習,加我微信,每次咨詢僅9.9元;

          3、更多需求(學習 代碼 視頻剪輯),都可以加我微信,歡迎咨詢。


          掃碼即可加我微信


          分享

          收藏

          點贊

          在看

          瀏覽 55
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲色激情综合网 | 欧美一级婬片免费视频黄 | 久久久精品少妇视频 | 黄片在线看。 | 无码人妻精品一区二区蜜桃视频 |