我有一個長的資料框架,其中有一個日期索引,每5分鐘滾動一次。然而,存在間隙,有時索引會脫離模式(前一行后3分鐘,而它應該是5分鐘)。我生成了一個陣列,其中的日期值按照相同的模式滾動。 我想修改我的資料框架,如果它的索引不在日期時間陣列中,就放棄每一行,并為每一個丟失的日期時間索引創建一個NaN的空行。我怎樣才能在沒有for回圈的情況下做到這一點呢?
示例代碼顯示了我希望最終得到的結果。df2代表修正后的df,其中索引不在5分鐘模式(12分鐘,27分鐘)的行被洗掉,缺少的25分鐘的行被添加并由南斯填充。
import pandas as pd
import matplotlib.dates as mdates
import numpy as np
from datetime import datetime
#創建隨機資料
varr1 = np.random.rand(6)
varr2 = np.random.rand(6)
#創建有問題的日期索引。
time_str1 = '23/9/2021 11:10'。
date_format_str1 = '%d/%m/%Y %H:%M'。
time_str2 = '23/9/2021 11:12'/span>
time_str3 = '23/9/2021 11:15'/span>
time_str4 = '23/9/2021 11:20'/span>
time_str5 = '23/9/2021 11:27'/span>
time_str6 = '23/9/2021 11:30'/span>
# DataFrame的索引有問題(一些行沒有遵循5分鐘的delta規則,而且25分鐘的標記也沒有)
df_time = []
df_time.append(datetime.strptime(time_str1, date_format_str1))
df_time.append(datetime.strptime(time_str2, date_format_str1))
df_time.append(datetime.strptime(time_str3, date_format_str1))
df_time.append(datetime.strptime(time_str4, date_format_str1))
df_time.append(datetime.strptime(time_str5, date_format_str1))
df_time.append(datetime.strptime(time_str6, date_format_str1))
df = pd.DataFrame(index=df_time)
df['var1'] = varr1
df['var2'] = varr2
# Function to generate an array of datetime[/span].
def perdelta(start, end, delta)。
curr = start
while curr < end:
yield curr
curr = delta
date_arr= []
# generate datetime that will serve as model[/span].
for result in perdelta(df.index[0], df. index[-1], dt.timedelta(minutes=5))。)
date_arr.append(result)
date_arr.append(datetime.strptime(time_str6, date_format_str1))
# 我想要的資料框架,從datetime陣列中添加索引缺失的行,并用NaN填充,而那些不在5分鐘模式內的行則被洗掉。
df2 = pd.DataFrame({'var1': [varr1[0], varr1[2], varr1[3], np. nan, varr1[-1]], 'var2'/span>: [varr2[0], varr2[2], varr2[3], np. nan, varr2[-1]]},index=date_arr)
uj5u.com熱心網友回復:
你可以試試下面的例子代碼。
import pandas as pd
import numpy as np
from datetime import Timedelta, datetime
varr1 = np.random.rand(6)
varr2 = np.random.rand(6)
date_format = '%d/%m/%Y %H:%M'。
dates = ['23/9/2021 11:10',
'23/9/2021 11:12'。
'23/9/2021 11:15'。
'23/9/2021 11:20'。
'23/9/2021 11:27'。
'23/9/2021 11:30']
indexes = [datetime.strptime(date, date_format) for date in dates]
df = pd.DataFrame({'var1': varr1, 'var2': varr2}, index=indexes)
expected_dates = []
cur = indexes[0]
end = indexes[-1]
while cur <= end:
expected_dates.append(cur)
cur = timedelta(minutes=5)
專案 = []
for index in expected_dates:
if index in df.index:
專案 = {
'var1': df.loc[index, 'var1'] 。
'var2': df.loc[index, 'var2'] 。
}
else:
專案 = {
'var1': np.nan,
'var2': np.nan
}
items.append(item)
df2 = pd.DataFrame(items, index=expected_dates)
df2
這是輸出結果
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332594.html
標籤:
上一篇:將資料從文本檔案傳遞給建構式

