使用python爬取连续降水数据信息实例

 更新时间:2024年01月23日 10:08:22   作者:里斯斯里 气象小筑  
这篇文章主要为大家介绍了使用python提取连续降水数据信息实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

介绍

给定每日的降水数据(数据可以缺测),提取存在连续降水的信息和累计降水量等。

程序使用python实现,具体如下。

1 数据展示

这里以创建的随机数为例:

time = pd.date_range(start='2020-01-01', end='2022-12-31', freq='D')
np.random.seed(42)
rain = np.random.uniform(-30, 30, size=len(time))
df = pd.DataFrame({'datetime':time, 'rain(mm)':rain})
df.loc[df['rain(mm)']<0, 'rain(mm)'] = 0
print(df)

打印结果如下,主要分成两列,一列是时间datetime,一列是降水量rain(mm)。时间用来判断是否邻近同一天,降水用来判断是否为降水天数。

       datetime   rain(mm)
0    2020-01-01   0.000000
1    2020-01-02  27.042858
2    2020-01-03  13.919637
3    2020-01-04   5.919509
4    2020-01-05   0.000000
...         ...        ...
1091 2022-12-27   8.978799
1092 2022-12-28   6.464208
1093 2022-12-29   0.761311
1094 2022-12-30   0.000000
1095 2022-12-31   0.000000

[1096 rows x 2 columns]

2 思路

2.1 筛选出降水天数

筛选出降水大于0的天数,并按照时间升序进行排列。对于其他值,比如暴雨日数(日降水>50mm)也可以做同样的筛选。

df_rain = df[df['rain(mm)']>0].copy()
df_sort = df_rain.sort_values(by=['datetime'], ascending=True)

打印df_sort来看一下。

       datetime   rain(mm)
1    2020-01-02  27.042858
2    2020-01-03  13.919637
3    2020-01-04   5.919509
7    2020-01-08  21.970569
8    2020-01-09   6.066901
...         ...        ...
1088 2022-12-24  29.470118
1090 2022-12-26  26.563906
1091 2022-12-27   8.978799
1092 2022-12-28   6.464208
1093 2022-12-29   0.761311

[549 rows x 2 columns]

2.2 计算间隔天数

与邻近的前一天进行时间相减计算,判断间隔的天数。

df_sort['间隔天数'] = df_sort['datetime'] - df_sort['datetime'].shift(1)
df_sort['间隔天数'] = df_sort['间隔天数'].apply(lambda x: x.days)

两个日期相减出来,数据类型是timedelta64[ns],需要转换为整数,可以直接使用其属性days

其中第一条对应的间隔天数为空,值为np.nan

间隔天数

2.3 连续降水划分

将出现连续降水的条数全部归成一类,作为单独的dataframe来操作,比如可以用来计算起止日期和连续天数等。

而在归类时所有连续降水的条数均当作独特的一类,也就是类名需要唯一,因此这里设置成开始日期作为唯一值。这里创建新的一列(日期标志)来存储类名。

日期标志需要分成两部分。

第一部分是不连续的日期,对应的间隔天数大于1,出现日期也对应了其本身日期,另外第一天对应的日期也是其本身。通过apply方法来读取间隔天数和 datetime进行设置:

def start_date(df_in):
    delta = df_in['间隔天数']
    if np.isnan(delta):
        return df_in['datetime']
    elif delta&gt;1.0:
        return df_in['datetime']
    else:
        return None

df_sort['日期标志'] = df_sort[['间隔天数', 'datetime']].apply(start_date, axis=1)

不连续日期对应标志

第二部分是连续天数,对应的间隔天数为1,可以用前面的数值来进行填充,具体方法如下:

df_sort['日期标志'].fillna(method='ffill', inplace=True)

连续日期对应标志

2.4 按类别进行划分

前一步中将连续天数的降水以开始日期来标志了,也就是日期标志列中具有相同值的就算作连续降水,以groupby函数对日期标志进行划分,并自定义函数来提取需要的信息。

def dateinfo(df):
    out = {
        '出现日期':df.iloc[0]['datetime'],
        '结束日期': df.iloc[-1]['datetime'],
        '持续天数': (df.iloc[-1]['datetime']-df.iloc[0]['datetime']).days+1,
        '累计降水量(mm)': df['rain(mm)'].sum(),
    }
    return pd.Series(out)
    
out = df_sort.groupby(by='日期标志').apply(dateinfo)
out.to_excel('连续降水统计.xlsx')

这里我提取了出现日期、结束日期、持续天数、累计降水量(mm),并作为一个Series返回,最终存储为DataFrame

持续降水信息

3 小结

通过给定的日降水数据(包含日期和降水)来判断连续降水相关信息,比如起止日期、持续天数、累计降水量等。

当然降水是以0为界,也可以设置成暴雨(50为界)判断等,核心思路类似。

可以是针对其他的数据,需要做连续发生天数的统计等。

打完,收工!

以上就是使用python提取连续降水数据信息实例的详细内容,更多关于python提取降水数据的资料请关注脚本之家其它相关文章!

相关文章

  • Python 调用 Windows API COM 新法

    Python 调用 Windows API COM 新法

    Python中调用Win32API 通常都是使用 PyWin32或者ctypes。本文给大家介绍Python 调用 Windows API COM 新法,感兴趣的朋友跟随小编一起看看吧
    2019-08-08
  • Python+pandas数据分析实践总结

    Python+pandas数据分析实践总结

    这篇文章主要介绍了Python+pandas数据分析实践总结的相关资料,需要的朋友可以参考下
    2023-07-07
  • Python外星人入侵游戏编程完整版

    Python外星人入侵游戏编程完整版

    这篇文章主要为大家详细介绍了Python外星人入侵游戏编程完整的实现思路,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Python栈类实例分析

    Python栈类实例分析

    这篇文章主要介绍了Python栈类,实例分析了Python实现栈的入栈、出栈、移除、判定为空的相关技巧,需要的朋友可以参考下
    2015-06-06
  • Django项目中包含多个应用时对url的配置方法

    Django项目中包含多个应用时对url的配置方法

    今天小编就为大家分享一篇Django项目中包含多个应用时对url的配置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • PyQtGraph在pyqt中的应用及安装过程

    PyQtGraph在pyqt中的应用及安装过程

    这篇文章主要介绍了PyQtGraph在pyqt中的应用,文中给大家介绍了pyqtgraph的主要用途及PyQtGraph的安装过程,需要的朋友可以参考下
    2019-08-08
  • python中__init__()方法详情

    python中__init__()方法详情

    这篇文章主要介绍了 python中__init__()方法详情,python类中定义的函数称为方法, init ()方法本质也是一个函数。这个函数的作用是初始化实例后的对象,具体内容请参考下文详细内容
    2021-11-11
  • Python3爬虫带上cookie的实例代码

    Python3爬虫带上cookie的实例代码

    在本篇文章里小编给各位分享的是一篇关于Python3爬虫带上cookie的实例代码内容,需要的朋友们可以学习下。
    2020-07-07
  • Python中的super用法详解

    Python中的super用法详解

    这篇文章主要介绍了Python中的super用法详解,本文讲解了关于super问题的发现与提出、走进Python的源码世界分析super的实现、延续的讨论super等内容,需要的朋友可以参考下
    2015-05-05
  • Python通过OpenCV的findContours获取轮廓并切割实例

    Python通过OpenCV的findContours获取轮廓并切割实例

    这篇文章主要介绍了Python通过OpenCV的findContours获取轮廓并切割实例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01

最新评论