gpt4 book ai didi

python - Rowwise min() 和 max() 对于具有 NaN 的列失败

转载 作者:太空狗 更新时间:2023-10-29 22:07:28 26 4
gpt4 key购买 nike

我正在尝试获取包含日期的两列的行向最大值(和最小值)

from datetime import date
import pandas as pd
import numpy as np

df = pd.DataFrame({'date_a' : [date(2015, 1, 1), date(2012, 6, 1),
date(2013, 1, 1), date(2016, 6, 1)],
'date_b' : [date(2012, 7, 1), date(2013, 1, 1),
date(2014, 3, 1), date(2013, 4, 1)]})

df[['date_a', 'date_b']].max(axis=1)
Out[46]:
0 2015-01-01
1 2013-01-01
2 2014-03-01
3 2016-06-01

如预期。但是,如果数据帧包含单个 NaN 值,则整个操作将失败

df_nan = pd.DataFrame({'date_a' : [date(2015, 1, 1), date(2012, 6, 1),
np.NaN, date(2016, 6, 1)],
'date_b' : [date(2012, 7, 1), date(2013, 1, 1),
date(2014, 3, 1), date(2013, 4, 1)]})

df_nan[['date_a', 'date_b']].max(axis=1)
Out[49]:
0 NaN
1 NaN
2 NaN
3 NaN
dtype: float64

这是怎么回事?我期待这个结果

0    2015-01-01
1 2013-01-01
2 NaN
3 2016-06-01

如何实现?

最佳答案

我认为最好的解决方案是使用适当的dtype。 Pandas 提供了一个非常集成的 datetime dtype。所以请注意,您正在使用 object dtypes...

>>> df
date_a date_b
0 2015-01-01 2012-07-01
1 2012-06-01 2013-01-01
2 NaN 2014-03-01
3 2016-06-01 2013-04-01
>>> df.dtypes
date_a object
date_b object
dtype: object

但是请注意,当你使用时问题就消失了

>>> df2 = df.apply(pd.to_datetime)
>>> df2
date_a date_b
0 2015-01-01 2012-07-01
1 2012-06-01 2013-01-01
2 NaT 2014-03-01
3 2016-06-01 2013-04-01
>>> df2.min(axis=1)
0 2012-07-01
1 2012-06-01
2 2014-03-01
3 2013-04-01
dtype: datetime64[ns]

关于python - Rowwise min() 和 max() 对于具有 NaN 的列失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45899340/

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