pandas处理日期缺失

 2023-09-05 阅读 52 评论 0

摘要:#两种方法实现 ''' 1)DataFrame.reindex:调整dataframe的索引以适应新的索引 2) DataFrame.resample,可以对时间序列重新采样,支持补充缺失值 ''' import pandas as pd import os %matplotlib inline df = pd
#两种方法实现
'''
1)DataFrame.reindex:调整dataframe的索引以适应新的索引
2) DataFrame.resample,可以对时间序列重新采样,支持补充缺失值
'''
import pandas as pd 
import os
%matplotlib inline
df = pd.DataFrame({"pdate":['2019-12-01','2019-12-02','2019-12-04','2019-12-05'],'pv':[100,200,400,500],'uv':[10,20,40,50], 
})
df
pdatepvuv
02019-12-0110010
12019-12-0220020
22019-12-0440040
32019-12-0550050
#df缺少2019-12-03这个日期
df.set_index('pdate').plot()
<matplotlib.axes._subplots.AxesSubplot at 0x1d68fb97e10>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cScC4omN-1601386256504)(output_2_1.png)]

#方法一
pdatepvuv
02019-12-0110010
12019-12-0220020
22019-12-0440040
32019-12-0550050
df_date = df.set_index('pdate')
df_date
#将索引设置为日期,并且将index改为时间序列的格式
pvuv
pdate
2019-12-0110010
2019-12-0220020
2019-12-0440040
2019-12-0550050
df_date.index
Index(['2019-12-01', '2019-12-02', '2019-12-04', '2019-12-05'], dtype='object', name='pdate')
#将DataFrame的index从字符串转换成时间序列,再输出相应index为时间序列的DataFrame
df_date = df_date.set_index(pd.to_datetime(df_date.index))
df_date.index
DatetimeIndex(['2019-12-01', '2019-12-02', '2019-12-04', '2019-12-05'], dtype='datetime64[ns]', name='pdate', freq=None)
pdate = pd.date_range(start = '2019-12-01',end = '2019-12-05')
pdate
DatetimeIndex(['2019-12-01', '2019-12-02', '2019-12-03', '2019-12-04','2019-12-05'],dtype='datetime64[ns]', freq='D')
df_date_new = df_date.reindex(pdate,fill_value=0)#注意,重新设置index是reindex,不是set_index
df_date_new
pvuv
2019-12-0110010
2019-12-0220020
2019-12-0300
2019-12-0440040
2019-12-0550050

‘’’
reindex()方法用于创建一个符合新索引的新对象
①对于Series类型,调用reindex()会将数据按照新的索引进行排列,如果某个索引值之前不存在,则引入缺失值
如:
②DataFrame中,reindex()可以改变行索引和列索引
reset_index(),顾名思义,即设置索引。可以设置单索引和复合索引
调用这个函数会生成一个新的DataFrame, 新的df使用一个列或多个列作为索引
reset_index(),它是set_index()的反操作,调用它分层索引的索引层级会被还原到列中

‘’’

df_date_new.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x1d691b08a58>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GkR5Se3o-1601386256511)(output_10_1.png)]

#方法二:pandas.resample方法
df
pdatepvuv
02019-12-0110010
12019-12-0220020
22019-12-0440040
32019-12-0550050
df_new2 = df.set_index(pd.to_datetime(df['pdate']))
#
df_new2
pdatepvuv
pdate
2019-12-012019-12-0110010
2019-12-022019-12-0220020
2019-12-042019-12-0440040
2019-12-052019-12-0550050
df_new2 = df.set_index(pd.to_datetime(df['pdate'])).drop('pdate',axis=1)
df_new2
pvuv
pdate
2019-12-0110010
2019-12-0220020
2019-12-0440040
2019-12-0550050
df_new3 = df_new2.resample('D').mean().fillna(0)
df_new3
pvuv
pdate
2019-12-01100.010.0
2019-12-02200.020.0
2019-12-030.00.0
2019-12-04400.040.0
2019-12-05500.050.0

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/846.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息