熊猫:使用iterrows()和pd.Series将值追加到Series

时间:2018-07-23 16:51:53

标签: python pandas

我的输入数据如下:

   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))

A screenshot can be seen here

系列“ 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。

2 个答案:

答案 0 :(得分:1)

使用数据框时,通常有更好的方法来执行任务,然后遍历数据框。例如,根据您的情况,您可以这样创建系列:

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列”

答案 1 :(得分:0)

给定一个数据帧df以及系列starttarget,您可以简单地使用set_index

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