我在嘗試使用pandas.Index.dropna屏蔽缺少日期時間索引值的行時遇到了一個奇怪的問題。出乎意料的是,應用掩碼僅選擇非缺失日期時間值會導致復制具有相同索引的行。
這是一個重現問題的小例子(pandas 1.4.2):
import pandas as pd
dates = ["01-May-2022", "02-May-2022", "02-May-2022", "03-May-2022", "04-May-2022"]
values = [1, 2, 3, 4, 5]
series = pd.Series(values, index=dates)
seriesB = series.loc[series.index.dropna()]
In [28]: series
Out[28]:
01-May-2022 1
02-May-2022 2
02-May-2022 3
03-May-2022 4
04-May-2022 5
dtype: int64
In [29]: seriesB
Out[29]:
01-May-2022 1
02-May-2022 2
02-May-2022 3
02-May-2022 2
02-May-2022 3
03-May-2022 4
04-May-2022 5
dtype: int64
有誰知道為什么 seriesB 有額外的行?
uj5u.com熱心網友回復:
這是因為您Series呼叫的系列在索引中有重復的值 - 也就是說02-May-2022,當您使用相同的值進行查找時,.loc[]它匹配兩次:
series.loc["02-May-2022"]
02-May-2022 2
02-May-2022 3
如果您有.loc[]兩次查找值,那么它將回傳 4 行(2x2 行):
series.loc[["02-May-2022","02-May-2022"]]
02-May-2022 2
02-May-2022 3
02-May-2022 2
02-May-2022 3
對.dropna()您的示例資料沒有影響。
附帶說明一下,如果需要,您可以使用此功能.loc[]來復制值:
series.loc[["01-May-2022","01-May-2022","01-May-2022","01-May-2022"]]
01-May-2022 1
01-May-2022 1
01-May-2022 1
01-May-2022 1
將此視為索引查找而不是屏蔽。
洗掉Series包含NA索引值的行應該像您預期的那樣作業 - 沒有重復:
dates = ["01-May-2022", "02-May-2022", np.nan, "03-May-2022", "04-May-2022"]
values = [1, 2, 3, 4, 5]
series = pd.Series(values, index=dates)
series
01-May-2022 1
02-May-2022 2
NaN 3
03-May-2022 4
04-May-2022 5
seriesB = series.loc[series.index.dropna()]
seriesB
01-May-2022 1
02-May-2022 2
03-May-2022 4
04-May-2022 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472626.html
