[英]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.