首页 > 解决方案 > 'ValueError: day is out of range for month' 因为数据中所有月份的所有日期都有 31 天

问题描述

我正在处理 3 小时的卫星降水数据。但是,所有月份都有 31 天。附加数据时间时出现错误。请帮忙!

sat=pd.read_csv(r"C:\Users\Amod\Documents\Dissertation\Data\MSWEP_INDIA_CITIES_FILTERED\data_11.375_75.875", sep=" ", header=None)


sat.columns = ["year", "month", "day", "satellite"]

years = list(sat.year)
months = list(sat.month)
days = list(sat.day)
rain = list(sat.satellite)

h = 0
datetimes = []
for i in range(len(years)):
    if i ==0:
        h = 0
    else:
        if days[i]==days[i-1]:
            h +=3 #h = h+1 is the same!
        else:
            h = 0
    datetimes.append(datetime.datetime(years[i], months[i], days[i], h))

datetimes

ValueError                                Traceback (most recent call last)
<ipython-input-6-53553b0773c9> in <module>
     10         else:
     11             h = 0
---> 12     datetimes.append(datetime.datetime(years[i], months[i], days[i], h))
     13 
     14 datetimes

ValueError: day is out of range for month

标签: pythonjupyter-notebook

解决方案


我认为您应该考虑使用pandas并过滤掉非日期,但这可以通过 try/except 来处理,如下所示:

sat=pd.read_csv(r"C:\Users\Amod\Documents\Dissertation\Data\MSWEP_INDIA_CITIES_FILTERED\data_11.375_75.875", sep=" ", header=None)



sat.columns = ["year", "month", "day", "satellite"]

years = list(sat.year)
months = list(sat.month)
days = list(sat.day)
rain = list(sat.satellite)

h = 0
datetimes = []
for i in range(len(years)):
    if i ==0:
        h = 0
    else:
        if days[i]==days[i-1]:
            h +=3 #h = h+1 is the same!
        else:
            h = 0
    try:        
        datetimes.append(datetime.datetime(years[i], months[i], days[i], h))
    except: continue

ETA:要处理 pandas 中的日期时间错误,请查看此处的“无效数据”部分

df['Date'] = pd.to_datetime(df['Date'], errors = 'coerce')
df = df[df['Date'] != 'NaT']

推荐阅读