0

我试图将我的值重新采样到小时。但是,由于我已经更改了 csv 文件中日期的格式,因为自动交换了低数字的月份和日期(2003-04-01 突然变成了 2003-01-04)。现在日期格式很好(在 Python 中显示 csv 文件时),但是在使用重新采样时,这些值出现在 NaN 值中。

df = pd.read_csv(r'C:\Users\water_level.csv',parse_dates=[0],index_col=0,decimal=",", delimiter=';')

`hour_avg = df_2.resample('H').mean()` 

我的数据样本: 以时间为索引的原始数据

之后:即使时间是日期时间,它也会将 99% 的数据显示为 NaN 值(每天显示一个值) 每小时 重新采样后具有 NaN 值的数据

当我对日值使用 resample 时,所有值都回来了。所以看来时间有问题。当我一开始使用格式时,出现“格式不适合”错误。我之前尝试过一种不同的方式(不确定有什么不同),但重新采样每小时工作一次。

我需要更改什么才能再次使用 resample 小时?

4

1 回答 1

0

你能分享你的数据样本吗?假设您的数据包含 DateTime 特征(即yyyy-mm-dd hh-mm-ss)和您尝试按小时重新采样的一些其他特征,NaN 值可能由于两个原因而出现:Pandas 的格式不正确或数据中缺少小时值。

(1) pandas 可能没有正确读取您的日期。阅读文件后,请确保日期列的格式正确(即 yyyy-mm-dd)。

df = pd.read_csv(r'C:\Users\water_level.csv',parse_dates=[0],index_col=0,decimal=",", delimiter=';')
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d %H:%M:%S')

(2)如果你的数据有任何空白,就会弹出 NaN 值。例如,假设数据是这种形式:

2000-01-01 00:00:00    1
2000-01-01 00:01:00    1
2000-01-01 00:03:00    1
2000-01-01 00:04:00    1
2000-01-01 00:06:00    1

如果您尝试hour_avg = df_2.resample('H').mean(),您的输出将如下所示:

2000-01-01 00:00:00    1
2000-01-01 00:01:00    1
2000-01-01 00:02:00    NaN
2000-01-01 00:03:00    1
2000-01-01 00:04:00    1
2000-01-01 00:05:00    NaN
2000-01-01 00:06:00    1

我怀疑问题是后者。如果是后者,您可以简单地使用删除 NaN 值df_2.dropna()。否则,如果您确实需要每小时分箱而不管丢失数据,您可以通过先填充缺失值然后尝试获取平均值来避免 NaN 值:

hour_pad = df_2.resample('H').pad()
hour_avg = hour_pad.resample('H').mean()
于 2020-08-18T21:07:03.923 回答