我正在使用Python 2.7和pandas,我有以下数据框:
col1 col2 col3 date_col
0 123 0 foo 9999-12-31
1 456 1 bar 2017-09-15
2 789 1 psi 9999-12-31
当我尝试使用此数据帧时,出现以下错误:
pandas._libs.tslibs.OutOfBoundsDattime:超出界限纳秒时间戳:9999-12-31 00:00:00
我知道这是因为pandas的时间戳窗口有限。
我的问题是:如何使用默认值替换超出日期窗口范围的date_col列中的所有值(例如2000-01-01)? 同样在我的真实数据框中,我只知道包含日期的列的索引,因此我不能使用列名。
感谢任何帮助!
答案 0 :(得分:0)
使用iloc
按位置选择to_datetime
和参数errors='coerce'
,以便将错误日期替换为NaT
s,将fillna
替换为{{3}}替换为{{ 1}}:
注意 - 如果date
或int
等错误数据全部替换为str
。
NaT
详情:
date = pd.Timestamp('2000-01-01')
df.iloc[:, 3] = pd.to_datetime(df.iloc[:, 3], errors='coerce').fillna(date)
print (df)
col1 col2 col3 date_col
0 123 0 foo 2000-01-01
1 456 1 bar 2017-09-15
2 789 1 psi 2000-01-01
另一种解决方案:
print (df.iloc[:, 3])
0 9999-12-31
1 2017-09-15
2 9999-12-31
Name: date_col, dtype: object
print (pd.to_datetime(df.iloc[:, 3], errors='coerce'))
0 NaT
1 2017-09-15
2 NaT
Name: date_col, dtype: datetime64[ns]
答案 1 :(得分:0)
df = df.replace({想要替换日期的正则表达式},{date})
这应该有效
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html