【问题标题】:Fill a fixed-size dataframe with null values in between valid data在有效数据之间用空值填充固定大小的数据框
【发布时间】:2021-11-13 20:22:10
【问题描述】:

我有一个传感器,每约 60 秒测量一次数据。调用之间有一点延迟,因此数据可能如下所示:

timestamp, value
12:01:45, 100
12:02:50, 90
12:03:55, 87
              # 12:04 missing
12:05:00, 91

我只需要精确到分钟,而不是秒。由于这会全天收集数据,因此应该有 1440 个条目(每天 1440 分钟),但是,一些缺少timestamps。

我正在将其加载到 pd.DataFrame 中,无论如何我都希望有 1440 行。如何将None 值挤入任何缺失的时间戳?

timestamp, value
12:01:45, 100
12:02:50, 90
12:03:55, 87
12:04:00, None  # Squeezed in a None value
12:05:00, 91

此外,一些数据丢失了几个小时,但我仍然想用None 填充这些数据。

最终,我希望使用matplotlib 绘制数据,x 轴介于 (0, 1440) 之间,y 轴介于 (0, 100) 之间。

【问题讨论】:

  • asfreq 也许?
  • 1.您不需要填充缺失的数据以使用 matplotlib 进行绘图,只需确保对 x、2 使用 timedelta/datetime 类型。如果您真的想填充,请将 timestamp 设置为索引并使用 reindex 自定义您想要的时间列表(检查timedelta_range

标签: python pandas dataframe numpy matplotlib


【解决方案1】:

如果需要仅替换第一个和最后一个时间戳之间的值,请使用 Resampler.firstSeries.fillna

df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.resample('1min', on='timestamp').first()
df['timestamp'] = df['timestamp'].fillna(df.index.to_series())
df = df.reset_index(drop=True)
print (df)
            timestamp  value
0 2021-09-20 12:01:45  100.0
1 2021-09-20 12:02:50   90.0
2 2021-09-20 12:03:55   87.0
3 2021-09-20 12:04:00    NaN
4 2021-09-20 12:05:00   91.0

如果需要每天的所有日期时间添加DataFrame.reindex:

df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.resample('1min', on='timestamp').first()

rng = pd.date_range('00:00:00','23:59:00', freq='Min')
df = df.reindex(rng)
df['timestamp'] = df['timestamp'].fillna(df.index.to_series())

df = df.reset_index(drop=True)
print (df)
               timestamp  value
0    2021-09-20 00:00:00    NaN
1    2021-09-20 00:01:00    NaN
2    2021-09-20 00:02:00    NaN
3    2021-09-20 00:03:00    NaN
4    2021-09-20 00:04:00    NaN
                 ...    ...
1435 2021-09-20 23:55:00    NaN
1436 2021-09-20 23:56:00    NaN
1437 2021-09-20 23:57:00    NaN
1438 2021-09-20 23:58:00    NaN
1439 2021-09-20 23:59:00    NaN

[1440 rows x 2 columns]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多