python - '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
解决方案
我认为您应该考虑使用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']
推荐阅读
- python - 如何立即将函数参数转换为小写(不在函数体中)?
- authorization - 一个属性可以用于 ALFA 中的多个类别吗?
- mysql - 如何在保持唯一行的同时进行内部连接
- php - 另一台电脑上的php表单
- python - 按连续值平均python pandas
- php - 在奏鸣曲电子商务中创建产品 - 没有可用的对象类型
- python - 如何为所有电子商务网站制作网络爬虫
- reactjs - 如何获取选定的文本
ReactJS 中的选项? - emacs - 如何在 Emacs 中为一个 linum 设置颜色?
- python - 如何在 Sublime Text 3 中删除 Python 代码中的红色曲线