【问题标题】:selecting dates of a dataframe and looping over date index选择数据框的日期并循环日期索引
【发布时间】:2018-09-21 20:33:16
【问题描述】:

我有一个数据框,其日期从 2006 年到 2016 年,每个日期有 7 个对应值。 数据如下:

                   H     PS    T    RH   TD   WDIR   WSP
date                                                        
2006-01-01 11:28:00   38  988.6  0.9  98.0  0.6  120.0  14.4
2006-01-01 11:28:00   46  987.6  0.5  91.0 -0.7  122.0  15.0
2006-01-01 11:28:00   57  986.3  0.5  89.0 -1.1  124.0  15.5
2006-01-01 11:28:00   66  985.1  0.5  90.0 -1.1  126.0  16.0
2006-01-01 11:28:00   74  984.1  0.4  90.0 -1.1  127.0  16.5
2006-01-01 11:28:00   81  983.3  0.4  90.0 -1.1  129.0  17.0

我想为每年选择几列(例如 2006 年的 T 和 RH)。因此,对于 2006 年到 2016 年的每一年,选择一堆列,然后将每个新数据帧写入一个文件中。 我做了以下事情:

df_H_T=(df[['RH','T']])
mask = (df_H_T['date'] >'2016-01-01 00:00:00') & (df_H_T['date']   <='2016-12-31 23:59:59')
df_H_T_2006 =df.loc[mask]
print(df_H_T_2006.head(20))
print(df_H_T_2006.tail(20)) 

但是不起作用,因为它似乎不知道“日期”是什么,但是当我打印数据框的头部时,日期似乎就在那里。我究竟做错了什么 ?

我的第二个问题是如何将它放在 year 变量的循环中,这样我就不会手动编写每个新数据框并一次选择一年,直到 2016 年? (我是新手,从未在 python 中使用过循环)。 谢谢, 约阿那

【问题讨论】:

标签: python loops datetime dataframe


【解决方案1】:

date 在原始数据帧中,但是您使用了df_H_T=df[['RH','T']],所以现在date 不在df_H_T 中。您可以使用从一个数据帧生成的掩码对另一个数据帧进行切片,只要它们具有相同的索引即可。所以你可以这样做

mask = (df['date'] >'2016-01-01 00:00:00') & (df['date']   <='2016-12-31 23:59:59')
df_H_T_2006 =df_H_T.loc[mask]

(注意:您将掩码应用于df,但大概您想将其应用于df_H_T)。

如果date 是日期时间格式,您可以直接使用df['date'].apply(lamda x: x.year==2016)。对于您的 for 循环,它将是

df_H_T=(df[['RH','T']])
for year in years:
    mask = df['date'].apply(lamda x: x.year==year)
    df_H_T_cur_year =df_H_T.loc[mask]
    print(df_H_T_cur_year.head(20))
    print(df_H_T_cur_year.tail(20)) 

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 2013-04-16
    • 2014-12-06
    • 2016-12-08
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2012-12-01
    相关资源
    最近更新 更多