簡體   English   中英

如何在熊貓數據框中的列開頭替換非整數值

[英]how to replace non integer value on a starting of a column in a pandas dataframe

我有一個數據框

 df=pd.DataFrame({"A":[1,2],"B":["a 1",np.nan]})

    A   B
0   1   a 1
1   2   NaN

我正在嘗試將df.B值替換為df.B的整數值。 (即)如果我們有abcd.. 1我想將其轉換為1。

我試過了,

df.B.replace(np.nan,"").astype(str).str.replace('^[^\d]*', '').astype(int)

但它不會轉換空字符串。 我收到ValueError: invalid literal for int() with base 10: ''請幫助實現我的輸出。 提前致謝。

我的預期輸出是

     A   B
 0   1   1
 1   2   ''

如果要提取integer s並且對於所有其他值獲得相同的值,請使用帶有try-except自定義函數:

def f(x):
    try:
        return int(x)
    except ValueError:
        return x

df.B = df.B.replace('^[^\d]*', '', regex=True).fillna('').apply(f)
print (df)
   A  B
0  1  1
1  2  

print (df.B.apply(type))
0    <class 'int'>
1    <class 'str'>
Name: B, dtype: object

不知道B列是否會包含"X"數字,因此最后我嘗試使用pd.to_numeric

df = pd.DataFrame({"A":[1,2, 3],"B":["a 1",np.nan, "X"]})
df["B"]= pd.to_numeric(
             df.B.str.extract("(\d+)"), errors="ignore"
         ).fillna("")
    A   B
0   1   1
1   2   
2   3   

感謝jezrael注意到我的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM