gpt4 book ai didi

python - Pandas:如何删除包含无效月/日列组合的行,例如 2 月 30 日?

转载 作者:太空宇宙 更新时间:2023-11-04 07:55:52 26 4
gpt4 key购买 nike

我的源数据使用 31 列作为日期值,每个月一行。我已将 31 天的列合并为一天列,现在我想将年、月和日列合并到日期时间(?)列中,以便我可以按年/月/日对行进行排序。

融化后,我的数据框如下所示:

       year  month day   prcp
0 1893 1 01 0.0
1 1893 2 01 0.0
2 1893 3 01 0.0
3 1893 4 01 NaN
4 1893 5 01 NaN
5 1893 6 01 NaN
6 1893 7 01 NaN
7 1893 8 01 0.0
8 1893 9 01 10.0
9 1893 10 01 0.0
10 1893 11 01 0.0
11 1893 12 01 NaN
12 1894 1 01 NaN
13 1894 2 01 0.0
14 1894 3 01 NaN
...

接下来,我尝试创建一个可以排序的“时间”列,使用年、月和日列作为日期时间构造函数的参数。我试过使用这种方法来做到这一点:

def make_datetime(y, m, d):
return(datetime(year=y, month=m, day=d))

df['time'] = np.vectorize(make_datetime)(df['year'].astype(int), df['month'].astype(int), df['day'].astype(int))

以上不会让我到达那里,因为在月份/日期列在一起没有意义的情况下它会失败,例如非闰年的 2 月 29 日,4 月 31 日等。我认为我接下来要做的是以某种方式将 datetime() 调用包装在 try/catch 中,当它由于不兼容的月/日组合而发出声音时,我应该将行放在 catch block 中。如果不对所有行进行 for 循环,我将如何去做呢?或者有更好的方法来解决这个问题吗?

最佳答案

您可以直接将 df 传递给 to_datetime

pd.to_datetime(df,errors='coerce')
Out[905]:
# NaT
# NaT
# 1892-02-29
# NaT
# NaT
# NaT
# 1896-02-29
# NaT
# NaT
dtype: datetime64[ns]
df['New']=pd.to_datetime(df,errors='coerce')
df.dropna()
Out[907]:
year month day New
# 1892 2 29 1892-02-29
# 1896 2 29 1896-02-29

关于python - Pandas:如何删除包含无效月/日列组合的行,例如 2 月 30 日?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49059717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com