我有一個包含一些缺失日期的時間序列資料的熊貓資料框。我想根據相鄰行中的日期填充這些。
例如,資料框中的條目是按時間順序排列的,因此我知道下面資料框中的兩個缺失日期也必須是 15/3/22,因為上面和下面的整數都是 15/3/22。
| 日期 | 時間 | 等等。 |
|---|---|---|
| 22 年 15 月 3 日 | 凌晨 1 點 34 分 40 秒 | ... |
| 鈉 | 凌晨 1 點 36 分 18 秒 | ... |
| 鈉 | 凌晨 1 點 36 分 20 秒 | ... |
| 22 年 15 月 3 日 | 凌晨 3 點 08 分 23 秒 | ... |
或者,當條目相隔幾天時,您將無法判斷缺失值應該是哪個日期(3/3、4/3 或 5/3),因此它們應該保留為 NaN。
| 日期 | 時間 | 等等。 |
|---|---|---|
| 22 年 3 月 3 日 | 上午 8 點 50 分 15 秒 | ... |
| 鈉 | 上午 10:40:00 | ... |
| 鈉 | 上午 12:10:40 | ... |
| 22 年 5 月 3 日 | 凌晨 3 點 08 分 23 秒 | ... |
我怎樣才能在熊貓中做到這一點?謝謝
創建示例資料框的示例代碼:
data1 = [['15/3/22', '1:34:40'], ['', '1:36:18'], ['', '1:36:20'],['15/3/22', '3:08:23']]
data2 = [['03/3/22', '8:50:15'], ['', '10:40:00'], ['', '12:10:40'], ['05/3/22', '3:08:23']]
df1 = pd.DataFrame(data1, columns = ['Date', 'Time'])
df2 = pd.DataFrame(data2, columns = ['Date', 'Time'])
df1['Date'] = pd.to_datetime( df1['Date'], format='%d/%m/%y', errors="coerce" )
df1['Time'] = pd.to_datetime( df1['Time'], format='%H:%M:%S', errors="coerce" )
df2['Date'] = pd.to_datetime( df2['Date'], format='%d/%m/%y', errors="coerce" )
df2['Time'] = pd.to_datetime( df2['Time'], format='%H:%M:%S', errors="coerce" )
uj5u.com熱心網友回復:
這里的檔案中有很多關于填充缺失資料的各種策略的好例子:https ://pandas.pydata.org/docs/user_guide/missing_data.html#filling-missing-values-fillna
我認為不存在遵循您所描述的填充策略的特定方法(盡管它是一個非常合理的方法),但我認為我們可以使用一個技巧很容易地實作它:通過執行前向填充和向后填充,然后僅在這兩個給出相同結果時才保留更改,這必須是在運行NaNs之前和之后的相同日期時。
date_ff = df["Date"].fillna(method="ffill")
date_bf = df["Date"].fillna(method="bfill")
df.loc[date_ff == date_bf, "Date"] = date_ff
如果您不熟悉.loc語法,最后一行將過濾到date_ff和date_bf相等的行并將日期列設定為相應的值date_ff(我們可以使用date_bf- 關鍵是它們給出完全相同的結果) .
請注意,由于非NaN值不被觸及,fillna()它們將相等date_ff,date_bf因此實際上保持不變。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/443589.html
