Pandas DataFrame.align(~)
方法確保兩個 DataFrames 具有相同的列或行標簽。
參數
1.other
| DataFrame
或 Series
您想要對齊的 DataFrame 或係列。
2. join
| string
| optional
要執行的連接類型:
-
"outer"
-
"inner"
-
"left"
-
"right"
默認情況下,join="outer"
。請參閱下麵的示例以進行說明。
3. axis
| None
或 int
或 string
| optional
執行對齊的軸:
軸 |
說明 |
---|---|
|
使用行標簽對齊 |
|
使用列標簽對齊 |
默認情況下,axis=None
。
4. level
| int
或 string
| 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
| None
或 string
| optional
填補缺失值的方法:
方法 |
說明 |
---|---|
|
使用之前的有效觀察進行填寫 |
|
使用下一個有效觀察進行填充 |
默認情況下,method=None
。
8. limit
| int
| optional
允許的最大連續填充次數。例如,如果您有 3 個連續的 NaN
,並且設置了 limit=2
,則隻會填充前兩個 NaN
,第三個將保持原樣。默認情況下,limit=None
。
9. fill_axis
| int
或 string
| optional
是否水平或垂直應用method
:
軸 |
說明 |
---|---|
|
填充是垂直應用的。 |
|
填充是水平應用的。 |
默認情況下,fill_axis=0
。
10.broadcast_axis
| int
或 string
| optional
執行廣播的軸:
軸 |
說明 |
---|---|
|
沿索引軸廣播。 |
|
沿列軸廣播。 |
默認情況下,broadcast_axis=None
。僅當源 DataFrame
和 other
具有不同尺寸時,這才相關。
返回值
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=None
是 axis=0
和 axis=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
執行水平前向填充。
相關用法
- Python PySpark DataFrame alias方法用法及代碼示例
- Python Pandas DataFrame all方法用法及代碼示例
- Python Pandas DataFrame agg方法用法及代碼示例
- Python Pandas DataFrame add方法用法及代碼示例
- Python Pandas DataFrame asfreq方法用法及代碼示例
- Python Pandas DataFrame any方法用法及代碼示例
- Python Pandas DataFrame append方法用法及代碼示例
- Python Pandas DataFrame asof方法用法及代碼示例
- Python Pandas DataFrame add_prefix方法用法及代碼示例
- Python Pandas DataFrame add_suffix方法用法及代碼示例
- Python Pandas DataFrame at屬性用法及代碼示例
- Python Pandas DataFrame axes屬性用法及代碼示例
- Python Pandas DataFrame astype方法用法及代碼示例
- Python Pandas DataFrame assign方法用法及代碼示例
- Python Pandas DataFrame apply方法用法及代碼示例
- Python Pandas DataFrame applymap方法用法及代碼示例
- Python Pandas DataFrame at_time方法用法及代碼示例
- Python Pandas DataFrame abs方法用法及代碼示例
- Python Pandas DataFrame empty屬性用法及代碼示例
- Python Pandas DataFrame pop方法用法及代碼示例
- Python Pandas DataFrame nsmallest方法用法及代碼示例
- Python Pandas DataFrame sample方法用法及代碼示例
- Python Pandas DataFrame items方法用法及代碼示例
- Python Pandas DataFrame max方法用法及代碼示例
- Python Pandas DataFrame swaplevel方法用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | align method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。