熊猫重新采样填充NaN



我有这个df:

Timestamp        List     Power    Energy     Status
0 2020-01-01 01:05:50   [5, 5, 5]      7000     15000     online
1 2020-01-01 01:06:20   [6, 6, 6]      7500     16000     online
2 2020-01-01 01:08:30   [0, 0, 0]         5         0    offline
...

不,我想重新采样。使用.resample如下:

df2 = df.set_index('timestamp').resample('min').?

我想在1分钟内得到df。对于每个intervall,我想与行匹配,如下所示:列表:if status=online:intervall else的最后一个条目"0";功率:如果状态=在线:间隔的平均值,否则为"0";能量:如果状态=在线:最后一次输入间隔'0;状态:间隔的最后一个状态;

如果df中没有数据,我如何填充.resample输出的NaN值?例如,对于一个间隔没有数据,则df应填充为Power=0;能量=0;status=脱机;。。。

我试过这样的东西:

df2 = df.set_index('Timestamp').resample('T').agg({'List':'last',
'Power':'mean',
'Energy':'last',
'Status':'last'})

得到:

Timestamp        List                      Power    Energy     Status
0 2020-01-01 01:05   [5, 5, 5]  (average of the interval)     15000     online
1 2020-01-01 01:06   [6, 6, 6]  (average of the interval)     16000     online
2 2020-01-01 01:07         NaN                        NaN       NaN        NaN
3 2020-01-01 01:08   [0, 0, 0]                          5         0    offline

预期结果:

Timestamp        List                      Power    Energy     Status
0 2020-01-01 01:05   [5, 5, 5]  (average of the interval)     15000     online
1 2020-01-01 01:06   [6, 6, 6]  (average of the interval)     16000     online
2 2020-01-01 01:07   [0, 0, 0]                          0         0    offline
3 2020-01-01 01:08   [0, 0, 0]                          5         0    offline

在文档中查看的.resample((.agg((期间,无法通过fillna规则分别处理每列NA值https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.agg.html

在您的情况下,即使插值也不起作用,因此,请尝试手动处理每列NA

首先,让我们初始化您的样本帧。

import pandas as pd
data = {"Timestamp":{"0": "2020-01-01 01:05:50",
"1": "2020-01-01 01:06:20",
"2": "2020-01-01 01:08:30"},
"List": {"0": [5, 5, 5],
"1": [6, 6, 6],
"2": [0, 0, 0]},
"Power": {"0": 7000,
"1": 7500,
"2": 5},
"Energy": {"0": 15000,
"1": 16000,
"2": 0},
"Status": {"0": "online",
"1": "online",
"2": "offline"},
}
df = pd.DataFrame(data)
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
df = df.set_index('Timestamp').resample('T').agg({'List':'last',
'Power':'mean',
'Energy':'last',
'Status':'last'})

现在我们可以手动替换每列中的NA单独

df["List"] = df["List"].fillna("[0, 0, 0]")
df["Status"] = df["Status"].fillna('offline')
df = df.fillna(0)

或者更方便的dict方式来做

values = {
'List': '[0, 0, 0]',
'Status': 'offline', 
'Power': 0, 
'Energy': 0
}
df = df.fillna(value=values)
Timestamp   List    Power   Energy  Status
0   2020-01-01 01:05:00     [5, 5, 5]   7000.0  15000.0     online
1   2020-01-01 01:06:00     [6, 6, 6]   7500.0  16000.0     online
2   2020-01-01 01:07:00     [0, 0, 0]   0.0     0.0     offline
3   2020-01-01 01:08:00     [0, 0, 0]   5.0     0.0     offline

相关内容

  • 没有找到相关文章

最新更新