簡體   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