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


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


Pandas DataFrame.asof(~) 方法返回不包含 NaN 的最後一行。

參數

1.where | datearray-likedates

您要檢查的索引值。通常,這將是日期列表。檢查下麵的示例以進行說明。

2. subset | stringarray-likestring | optional

檢查 NaN 時要考慮的列的標簽。默認情況下,會考慮所有列。

返回值

如果 where 是標量,則返回 Series。否則,返回DataFrame

警告

源 DataFrame 的索引必須進行排序,否則會引發錯誤。

例子

基本用法

考慮以下 DataFrame :

df = pd.DataFrame({"A":[3,4,pd.np.NaN,2], "B":[5,6,7,8]}, index=[10,20,30,40])
df



    A    B
10  3.0  5
20  4.0  6
30  NaN  7
40  2.0  8

請注意 DataFrame 的索引是如何排序的。這是使用該方法的前提條件。

要獲取索引值 35(含)之前沒有 NaN 的最後一行:

df.asof(35)



A    4.0
B    6.0
Name: 35, dtype: float64

在這裏,我們獲得第二行(索引為 20 的行)。索引值為 40 的第 4 行被忽略,因為它超出了 35 的指定索引值。

日期作為索引

考慮以下帶有 DatetimeIndex 的 DataFrame :

my_index = pd.DatetimeIndex(["2020-12-24", "2020-12-25", "2020-12-26", "2020-12-27"])
df = pd.DataFrame({"A":[3,4,pd.np.NaN,2], "B":[5,6,7,8]}, index=my_index)
df



            A    B
2020-12-24  3.0  5
2020-12-25  4.0  6
2020-12-26  NaN  7
2020-12-27  2.0  8

這裏,索引值是日期,同樣是經過排序的。

要獲取兩個特定日期(含)之前不帶 NaN 的最後一行:

my_where = pd.DatetimeIndex(["2020-12-24", "2020-12-26"])
df.asof(my_where)



            A    B
2020-12-24  3.0  5.0
2020-12-26  4.0  6.0

請注意以下事項:

  • 第二行返回 2020-12-25 的行值。這是因為 2020-12-26 的行值包含 NaN ,因此下一個候選者是 2020-12-25 的行值,其中不包含任何 NaN

  • 返回的DataFrame的新索引值是您在參數中指定的值。

相關用法


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