【发布时间】:2020-09-12 01:07:54
【问题描述】:
我有一个pandas DataFrame 的形式:
id amount birth
0 4 78.0 1980-02-02 00:00:00
1 5 24.0 1989-03-03 00:00:00
2 6 49.5 2014-01-01 00:00:00
3 7 34.0 2014-01-01 00:00:00
4 8 49.5 2014-01-01 00:00:00
我只对dataframe 的birth 列中的年、月和日感兴趣。我试图利用来自pandas 的Python datetime,但它导致了一个错误:
OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1054-02-07 00:00:00
birth 列是 object dtype。
我的猜测是日期不正确。我不想将参数errors="coerce" 传递给to_datetime 方法,因为每个项目都很重要,我只需要YYYY-MM-DD。
我试图利用来自pandas 的regex:
df["birth"].str.find("(\d{4})-(\d{2})-(\d{2})")
但这会返回NANs。我该如何解决这个问题?
谢谢
【问题讨论】:
-
您可能需要在处理
df['birth']之前将其转换为不同的数据类型。你能发布df.dtypes的输出吗? -
df['Year'] = df['birth'].astype(str).str.extract(r'^(\d{4})', expand=False)/df['Month'] = df['birth'].astype(str).str.extract(r'-(\d{1,2})-', expand=False)/df['Day'] = df['birth'].astype(str).str.extract(r'^.*-(\d{1,2})', expand=False) -
那么当我说您只想返回一个包含
YYYY-MM-DD格式的所有值的列表时,我是否正确阅读? -
没错!这就是我需要的。
标签: python python-3.x regex pandas dataframe