gpt4 book ai didi

python - 如何重新格式化 Pandas 数据框中的日期数据

转载 作者:行者123 更新时间:2023-12-01 07:04:23 25 4
gpt4 key购买 nike

我的输入数据框是

df = pd.DataFrame({'Source':['Pre-Nov 2017', 'Pre-Nov 2017', 'Oct 19', '2019-04-01 00:00:00', '2019-06-01 00:00:00', 'Nov 17-Nov 18', 'Nov 17-Nov 18']})

我需要如下所示的目标列

enter image description here

如果我使用下面的代码,它不起作用。我在“目标”列中获得了相同的“源”值。

df['Target'] = pd.to_datetime(df['Source'], format= '%b %Y',errors='ignore')

看起来 pandas 正在将“2019-04-01 00:00:00”、“2019-06-01 00:00:00”等值视为 NaN

最佳答案

一个想法是,如果不匹配日期时间,则使用 errors='coerce' 来查找缺失值,然后通过 Series.dt.strftime 转换为自定义字符串。 - NaT 也是字符串,因此替换为原始用途 Series.mask :

df['Target'] = (pd.to_datetime(df['Source'], errors='coerce')
.dt.strftime('%b %y')
.mask(lambda x: x == 'NaT', df['Source']))
print (df)

Source Target
0 Pre-Nov 2017 Pre-Nov 2017
1 Pre-Nov 2017 Pre-Nov 2017
2 Oct 19 Oct 19
3 2019-04-01 00:00:00 Apr 19
4 2019-06-01 00:00:00 Jun 19
5 Nov 17-Nov 18 Nov 17-Nov 18
6 Nov 17-Nov 18 Nov 17-Nov 18

替代方法是使用 numpy.where :

d = pd.to_datetime(df['Source'], errors='coerce')
df['Target'] = np.where(d.isna(), df['Source'], d.dt.strftime('%b %y'))

编辑:

but why did this did not worked

df['Target'] = pd.to_datetime(df['Source'], format= '%b %Y',errors='ignore')

如果检查to_datetime并使用 errors='ignore' 如果转换失败,它会返回相同的列值。

If 'ignore', then invalid parsing will return the input

关于python - 如何重新格式化 Pandas 数据框中的日期数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58502611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com