簡體   English   中英

Pandas:使用iterrows()和pd.Series將值附加到系列

[英]Pandas: Using iterrows() and pd.Series to Append Values to Series

我的輸入數據如下所示:

   cat  start               target
0   1   2016-09-01 00:00:00 4.370279
1   1   2016-09-01 00:00:00 1.367778
2   1   2016-09-01 00:00:00 0.385834

我想構建一個系列,使用“開始”作為開始日期,使用“目標”作為系列值。 iterrows()正在為“imp”提取正確的值,但是當附加到time_series時,只有第一個值被傳遞到所有系列點。 “data = imp”每次拉第0行的原因是什么?

t0 = model_input_test['start'][0] # t0 = 2016-09-01 00:00:00
num_ts = len(model_input_test.index) # num_ts = 1348
time_series = []
for i, row in model_input_test.iterrows():
    imp = row.loc['target']
    print(imp)
    index = pd.DatetimeIndex(start=t0, freq='H', periods=num_ts)
    time_series.append(pd.Series(data=imp, index=index))

可以在此處看到屏幕截圖

系列“time_series”應如下所示:

2016-09-01 00:00:00    4.370279
2016-09-01 01:00:00    1.367778
2016-09-01 02:00:00    0.385834

但最終看起來像這樣:

2016-09-01 00:00:00    4.370279
2016-09-01 01:00:00    4.370279
2016-09-01 02:00:00    4.370279

我在Sagemaker上使用Jupyter conda_python3。

使用數據幀時,通常有更好的方法來執行任務,然后遍歷數據幀。 例如,在您的情況下,您可以像這樣創建系列:

time_series = (df.set_index(pd.date_range(pd.to_datetime(df.start).iloc[0],
                                        periods = len(df), freq='H')))['target']


>>> time_series
2016-09-01 00:00:00    4.370279
2016-09-01 01:00:00    1.367778
2016-09-01 02:00:00    0.385834
Freq: H, Name: target, dtype: float64
>>> type(time_series)
<class 'pandas.core.series.Series'>

基本上,這表示:“將索引設置為從第一個日期開始每小時遞增一個日期范圍,然后獲取target列”

給定數據幀df和系列starttarget ,您只需使用set_index

time_series = df.set_index('start')['target']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM