我有一个数据框df
,其中存在一个Date
字段,如下所示。我正在使用pd.read_excel()
方法从excel中读取此内容。
Company Code Trxn_date Company Name Type
20040 2019-05-11 00:00:00 ABC Series A #<--the date is in `datetime` object only.
20034 2019-04-26 00:00:00 XYZ Series A
20033 "5/15/2018\n23/4/2019" PQR "Series A
Series B" # <-- In same row.
20040 2019-06-05 00:00:00 ABC Series B
20056 8/16/2019 MNO Series B
如您所见,对于20033
,Trxn_date
中有两个条目,相隔\n
。 Type
字段也是如此。因此,如果我应用pd.to_datetime(df['Trxn_date'])
,我会得到一个明显的错误TypeError: invalid string coercion to datetime
。我不想使用coerce
选项。
请注意,除了20033
和20056
以外,所有日期都由熊猫自动转换为datetime
对象。
我想获得df
,如下所示。
Company Code Trxn_date Company Name Type
20040 2019-05-11 ABC Series A
20034 2019-04-26 XYZ Series A
20033 2019-04-23 PQR Series B #<--Only the last date string is picked up and converted to datetime.
20040 2019-06-05 ABC Series B
20056 2019-08-16 MNO Series B #<--The date format is changed to `yyyy-mm-dd`.
我无法获得实现上述目标的任何线索。对于20056
,我可以使用pd.to_datetime(df['Trxn_date'],errors='coerce').apply(lambda x : x.strftime('%Y-%m-%d') if pd.notnull(x) else ' ')
。此操作在Trxn_date
的{{1}}字段中创建一个空白。
有人可以对此提供任何见解吗?可能我必须编写一个函数,然后使用20033
来实现相同功能?
答案 0 :(得分:2)
您可以用\n
拆分,并用str[-1]
来获取最后一个列表,但是separator \n
depends of real data, so should be different:
df['Trxn_date'] = df['Trxn_date'].str.split('\n').str[-1]
df['Type'] = df['Type'].str.split('\n').str[-1]
df['Trxn_date'] = pd.to_datetime(df['Trxn_date'],errors='coerce').dt.strftime('%Y-%m-%d')