gpt4 book ai didi

python - 从 pandas datetime 列中提取年份作为数值,空单元格使用 NaN 而不是 NaT

转载 作者:行者123 更新时间:2023-12-02 02:50:42 25 4
gpt4 key购买 nike

我想将日期时间列中的年份提取到新的“yyyy”列中,并且我希望缺失值 (NaT) 显示为“NaN”,因此应更改新列的日期时间数据类型我想,但我被卡住了..

初始 df:

        Date  ID
0 2016-01-01 12
1 2015-01-01 96
2 NaT 20
3 2018-01-01 73
4 2017-01-01 84
5 NaT 26
6 2013-01-01 87
7 2016-01-01 64
8 2019-01-01 11
9 2014-01-01 34

期望的 df:

        Date  ID  yyyy
0 2016-01-01 12 2016
1 2015-01-01 96 2015
2 NaT 20 NaN
3 2018-01-01 73 2018
4 2017-01-01 84 2017
5 NaT 26 NaN
6 2013-01-01 87 2013
7 2016-01-01 64 2016
8 2019-01-01 11 2019
9 2014-01-01 34 2014

代码:

import pandas as pd

import numpy as np



# example df
df = pd.DataFrame({"ID": [12,96,20,73,84,26,87,64,11,34],

"Date": ['2016-01-01', '2015-01-01', np.nan, '2018-01-01', '2017-01-01', np.nan, '2013-01-01', '2016-01-01', '2019-01-01', '2014-01-01']})



df.ID = pd.to_numeric(df.ID)

df.Date = pd.to_datetime(df.Date)
print(df)

#extraction of year from date
df['yyyy'] = pd.to_datetime(df.Date).dt.strftime('%Y')



#Try to set NaT to NaN or datetime to numeric, PROBLEM: empty cells keep 'NaT'
df.loc[(df['yyyy'].isna()), 'yyyy'] = np.nan

 #(try1)
df.yyyy = df.Date.astype(float)
 #(try2)
df.yyyy = pd.to_numeric(df.Date)
 #(try3)

print(df)


最佳答案

使用Series.dt.year使用 Int64 转换为整数:

df.Date = pd.to_datetime(df.Date)

df['yyyy'] = df.Date.dt.year.astype('Int64')
print (df)
ID Date yyyy
0 12 2016-01-01 2016
1 96 2015-01-01 2015
2 20 NaT <NA>
3 73 2018-01-01 2018
4 84 2017-01-01 2017
5 26 NaT <NA>
6 87 2013-01-01 2013
7 64 2016-01-01 2016
8 11 2019-01-01 2019
9 34 2014-01-01 2014

没有将 float 转换为整数:

df['yyyy'] = df.Date.dt.year
print (df)
ID Date yyyy
0 12 2016-01-01 2016.0
1 96 2015-01-01 2015.0
2 20 NaT NaN
3 73 2018-01-01 2018.0
4 84 2017-01-01 2017.0
5 26 NaT NaN
6 87 2013-01-01 2013.0
7 64 2016-01-01 2016.0
8 11 2019-01-01 2019.0
9 34 2014-01-01 2014.0

您的解决方案将 NaT 转换为字符串 NaT,因此可以使用 replace。顺便说一句,在 pandas 的最新版本中 replace 不是必需的,它可以正常工作。

df['yyyy'] = pd.to_datetime(df.Date).dt.strftime('%Y').replace('NaT', np.nan)

关于python - 从 pandas datetime 列中提取年份作为数值,空单元格使用 NaN 而不是 NaT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62021214/

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