繁体   English   中英

熊猫基于旧列的新列,条件为无值

[英]Pandas new column based on old column with conditional to handle None value

我正在尝试根据熊猫中的现有专栏创建一个新专栏。 现有列包含一年和季度。 IE:“ 201901”或为空白。 如果原始列具有有效条目,则新列应包含完整的时间戳,否则为空。

IE:

输入
201901
201902
没有
201901

所需输出
日期时间(2019,01,01)
日期时间(2019,03,01)
没有
日期时间(2019,01,01)

我的尝试:


    df['stamp'] = np.where(df['quarter'].astype(str).str.len() == 8,\
       datetime( df['quarter'].astype(str).str[0:4].astype(int), \
                 df['quarter'].astype(str).str[4:6].astype(int)*3,1), \
    None)

结果:

ValueError: invalid literal for int() with base 10: ''

在我看来,条件的True分支的代码正在评估所有行。 注意:条件是正确的,它可以正确标识有效条目。

pandas.to_datetime将自动解析季度,但其格式2019Q3 ,年份后跟Q和Quarter。

由于您有一列带有None的整数,因此很难知道基础值是不是真正的整数,或者它们是否被强制转换为float ,这可能会弄乱字符串切片,而无需先进行替换。

import pandas as pd

s = df.stamp.astype(str).replace('\.0', '', regex=True) # Remove .replace if truly integer
pd.to_datetime(s.str[0:4] + 'Q' + s.str[-1], errors='coerce')

#0   2019-01-01
#1   2019-04-01
#2          NaT
#3   2019-01-01
#Name: stamp, dtype: datetime64[ns]

对于丢失的行,您会得到一些垃圾'nanQn''NoneQe' ,但是由于无论如何它将变成NaT可能不是什么大问题。

你能做点什么...

df['stamp'] = df['quarter'].replace('', np.nan, inplace=True)

然后进行其他计算?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM