我有一个pandas数据帧df
:
Date Activity Vector
0 2017-03-01T15:20:00 [0.0366666666667, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0...
1 2017-03-01T15:25:00 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
2 2017-03-01T15:45:00 [0.163333333333, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
3 2017-03-01T15:50:00 [0.316666666667, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
4 2017-03-01T15:55:00 [0.0666666666667, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0...
5 2017-03-01T16:00:00 [0.123333333333, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
6 2017-03-01T16:05:00 [0.0333333333333, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0...
7 2017-03-01T16:10:00 [0.356666666667, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
8 2017-03-01T16:15:00 [0.476666666667, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
9 2017-03-01T16:20:00 [0.113333333333, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
10 2017-03-01T16:50:00 [0.0733333333333, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0...
此数据是包含一些缺失值的时间序列(请注意,Date
列的类型为str
)。
我想重新索引此数据框并使用numpy向量填充缺少的条目np.zeros(15)
我尝试过以下方法:
df = data.clean_df[['Date', 'Activity Vector']]
df['timestamp'] = pd.to_datetime(df['Date'])
# print(df.dtypes)
df = df.set_index('timestamp').resample('300S').ffill()
给了我以下内容:
timestamp Date Activity Vector
0 2017-03-01 15:20:00 2017-03-01T15:20:00 [0.0366666666667, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0...
1 2017-03-01 15:25:00 2017-03-01T15:25:00 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
2 2017-03-01 15:30:00 2017-03-01T15:25:00 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
3 2017-03-01 15:35:00 2017-03-01T15:25:00 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
4 2017-03-01 15:40:00 2017-03-01T15:25:00 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
5 2017-03-01 15:45:00 2017-03-01T15:45:00 [0.163333333333, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
6 2017-03-01 15:50:00 2017-03-01T15:50:00 [0.316666666667, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
7 2017-03-01 15:55:00 2017-03-01T15:55:00 [0.0666666666667, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0...
8 2017-03-01 16:00:00 2017-03-01T16:00:00 [0.123333333333, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
9 2017-03-01 16:05:00 2017-03-01T16:05:00 [0.0333333333333, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0...
10 2017-03-01 16:10:00 2017-03-01T16:10:00 [0.356666666667, 0.0, 0.0, 0.0,
然而,这会通过ffill
填充上一个条目中缺少的样本,如何使用自定义条目填充新行,例如Date
为任何内容(无关紧要)因为它将在稍后删除)但Activity Vector
填充了一个零的向量,np.zeros(15)
答案 0 :(得分:1)
由于您说Date being anything (doesn't matter as it will be dropped later)
,而不是ffill
,您可以使用asfreq
,然后使用所需的列表或字符串填充NaN
数据。
如果你想将numpy数组作为字符串,你可以使用str。如果您希望将数组作为示例列表,则可以使用ast.literal_eval()
import ast
df['timestamp'] = pd.to_datetime(df['Date'])
# print(df.dtypes)
df = df.set_index('timestamp').resample('300S').asfreq()
df['Activity Vector'] = df['Activity Vector'].fillna(str(np.zeros(15).tolist())).apply(str)
df['Activity Vector'] = df['Activity Vector'].apply(ast.literal_eval)
希望这会有所帮助。