微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python日期时间重新采样结果突然变为NaN值

如何解决Python日期时间重新采样结果突然变为NaN值

我尝试将值重新采样为小时。但是,由于我自动更改了带有低数字的月份和日期,因此更改了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()` 

我的数据示例: Raw data with time as index

此后:即使时间是日期时间,它也将99%的数据显示为NaN值(每天显示一个值) Data with NaN values after resample per hours

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

我需要更改什么才能再次使用重新采样一小时?

解决方法

您可以共享数据样本吗?假设您的数据包含DateTime功能(即yyyy-mm-dd hh-mm-ss)和您尝试按小时重新采样的其他功能,则可能由于两个原因出现NaN值:熊猫格式错误或数据中缺少小时值。

(1)可能是熊猫未正确读取您的日期。读取文件后,请确保日期列的格式正确(即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

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

hour_pad = df_2.resample('H').pad()
hour_avg = hour_pad.resample('H').mean()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。