當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Pandas DataFrame align方法用法及代碼示例


Pandas DataFrame.align(~) 方法確保兩個 DataFrames 具有相同的列或行標簽。

參數

1.other | DataFrameSeries

您想要對齊的 DataFrame 或係列。

2. join | string | optional

要執行的連接類型:

  • "outer"

  • "inner"

  • "left"

  • "right"

默認情況下,join="outer" 。請參閱下麵的示例以進行說明。

3. axis | Noneintstring | optional

執行對齊的軸:

說明

0"index"

使用行標簽對齊

1"columns"

使用列標簽對齊

默認情況下,axis=None

4. level | intstring | optional

目標水平。這僅與多索引數據幀相關。默認情況下,level=None

5. copy | boolean | optional

是否返回新副本。如果 copy=False 且未執行重新索引,則將返回原始 DataFrames/Series。默認情況下,copy=True

6. fill_value | scalar | optional

用於填充缺失值的值 (NaN)。默認情況下, fill_value=np.NaN ,即缺失值保持原樣。

7. method | Nonestring | optional

填補缺失值的方法:

方法

說明

"pad""ffill"

使用之前的有效觀察進行填寫

"backfill""bfill"

使用下一個有效觀察進行填充

默認情況下,method=None

8. limit | int | optional

允許的最大連續填充次數。例如,如果您有 3 個連續的 NaN ,並且設置了 limit=2 ,則隻會填充前兩個 NaN ,第三個將保持原樣。默認情況下,limit=None

9. fill_axis | intstring | optional

是否水平或垂直應用method

說明

0"index"

填充是垂直應用的。

1"columns"

填充是水平應用的。

默認情況下,fill_axis=0

10.broadcast_axis | intstring | optional

執行廣播的軸:

說明

0"index"

沿索引軸廣播。

1"columns"

沿列軸廣播。

默認情況下,broadcast_axis=None 。僅當源 DataFrameother 具有不同尺寸時,這才相關。

返回值

DataFrames 的 sized-two 元組(對齊的源 DataFrame、其他 DataFrame/Series)。

例子

指定連接類型

考慮以下兩個 DataFrame:

df_one = pd.DataFrame({"A":[1,2], "B":[3,4], "C":[5,6]})
df_two = pd.DataFrame({"A":[7,8], "E":[9,10], "B":[11,12]}, index=["a","b"])



 [df_one]          [df_two]
   A  B  C          A  E   B
0  1  3  5       a  7  9   11
1  2  4  6       b  8  10  12
外full-join

要通過外部full-join對齊兩個DataFrame:

a_one, a_two = df_one.align(df_two, axis=1)      # join="outer"



    [a_one]        |        [a_two]
   A  B  C  E      |      A  B   C    E
0  1  3  5  NaN    |   a  7  12  NaN  9
1  2  4  6  NaN    |   b  8  12  NaN  10

在此,請注意以下事項:

  • 默認情況下, join="outer" ,這意味著生成的 DataFrames 將具有兩個輸入 DataFrame 中存在的所有列標簽。這就是我們在 a_one 中看到列標簽 E 和在 a_two 中看到列標簽 C 的原因。

  • axis=1 參數告訴 Pandas 按列執行對齊。

  • 盡管添加了新列,但它們不包含任何值,因為它們填充了 NaN

內部聯接

通過 inner-join 對齊:

a_one, a_two = df_one.align(df_two, join="inner", axis=1)



 [a_one]      [a_two]
   A  B          A  B  
0  1  3       a  7  11
1  2  4       b  8  12

我們獲得此結果是因為 DataFrames 中都存在列標簽 "A""B" - 所有其他列都被剝離。

左連接

通過 left-join 對齊:

a_one, a_two = df_one.align(df_two, join="left", axis=1)
a_one



  [a_one]         [a_two]
   A  B  C        A  B   C
0  1  3  5     a  7  11  NaN
1  2  4  6     b  8  12  NaN

通過執行左連接,我們確保 other DataFrame 具有源 DataFrame 的所有列標簽。這就是為什麽我們看到 C 列出現在 a_two 中。

指定軸

再次假設我們有以下兩個 DataFrame:

df_one = pd.DataFrame({"A":[1,2], "B":[3,4], "C":[5,6]})
df_two = pd.DataFrame({"A":[7,8], "E":[9,10], "B":[11,12]}, index=["a","b"])



 [df_one]         [df_two]
   A  B  C          A  E   B
0  1  3  5       a  7  9   11
1  2  4  6       b  8  10  12
軸=0
a_one, a_two = df_one.align(df_two, axis=0)



    [a_one]               [a_two]
   A    B    C          A    E    B
0  1.0  3.0  5.0     0  NaN  NaN  NaN
1  2.0  4.0  6.0     1  NaN  NaN  NaN
a  NaN  NaN  NaN     a  7.0  9.0  11.0
b  NaN  NaN  NaN     b  8.0  10.0 12.0

通過設置axis=0,我們告訴 Pandas對齊行標簽,也就是說,兩個結果 DataFrames 具有完全相同的行標簽。但是,請注意兩個 DataFrame 的列標簽如何保持完整。

軸=1
a_one, a_two = df_one.align(df_two, axis=1)



    [a_one]        |        [a_two]
   A  B  C  E      |      A  B   C    E
0  1  3  5  NaN    |   a  7  12  NaN  9
1  2  4  6  NaN    |   b  8  12  NaN  10

通過設置axis=1,我們告訴 Pandas對齊列標簽,也就是說,兩個生成的 DataFrames 具有完全相同的列標簽。但是,請注意兩個 DataFrame 的行標簽如何保持完整。

軸=無

默認參數值為axis=None

a_one, a_two = df_one.align(df_two)      # axis=None



       [a_one]                    [a_two]
   A    B    C    E         A    B     C    E
0  1.0  3.0  5.0  NaN    0  NaN  NaN   NaN  NaN
1  2.0  4.0  6.0  NaN    1  NaN  NaN   NaN  NaN
a  NaN  NaN  NaN  NaN    a  7.0  11.0  NaN  9.0
b  NaN  NaN  NaN  NaN    b  8.0  12.0  NaN  10.0

axis=Noneaxis=0axis=1 的組合,也就是說,生成的 DataFrames 將共享相同的行標簽和列標簽。

進行灌裝

考慮我們之前的DataFrames:

df_one = pd.DataFrame({"A":[1,2], "B":[3,4], "C":[5,6]})
df_two = pd.DataFrame({"A":[7,8], "E":[9,10], "B":[11,12]}, index=["a","b"])



 [df_one]          [df_two]
   A  B  C          A  E   B
0  1  3  5       a  7  9   11
1  2  4  6       b  8  10  12

使用外部 full-join 執行水平對齊會產生:

a_one, a_two = df_one.align(df_two, axis=1)      # join="outer"



    [a_one]        |        [a_two]
   A  B  C  E      |      A  B   C    E
0  1  3  5  NaN    |   a  7  12  NaN  9
1  2  4  6  NaN    |   b  8  12  NaN  10

請注意,由於默認情況下不執行填充,因此我們最終會得到缺失值。

要填充 NaN ,我們可以指定參數 method 和可選的 fill_axis

a_one, a_two = df_one.align(df_two, axis=1, method="ffill", fill_axis=1)
a_one, a_two



        [a_one]         |           [a_two]
   A    B    C    E     |      A    B     C     E
0  1.0  3.0  5.0  5.0   |   a  7.0  11.0  11.0  9.0
1  2.0  4.0  6.0  6.0   |   b  8.0  12.0  12.0  10.0

在此,請注意以下事項:

  • method="ffill" 應用前向填充,這意味著 NaN 使用之前的有效觀察值進行填充。

  • fill_axis=1 執行水平前向填充。

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | align method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。