Python 如何替换数据帧中列开头的非整数值

Python 如何替换数据帧中列开头的非整数值,python,pandas,dataframe,data-analysis,Python,Pandas,Dataframe,Data Analysis,我有一个数据框 df=pd.DataFrame({"A":[1,2],"B":["a 1",np.nan]}) A B 0 1 a 1 1 2 NaN 我试图将df.B值替换为其中的整数值。 (即)如果我们有abcd。。1我想将其转换为1 我试过了 df.B.replace(np.nan,"").astype(str).str.replace('^[^\d]*', '').astype(int) 但它并没有转换空字符串。我越来越 ValueError:以10为

我有一个数据框

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

    A   B
0   1   a 1
1   2   NaN
我试图将
df.B
值替换为其中的整数值。 (即)如果我们有
abcd。。1
我想将其转换为1

我试过了

df.B.replace(np.nan,"").astype(str).str.replace('^[^\d]*', '').astype(int)
但它并没有转换空字符串。我越来越
ValueError:以10为基数的int()的文本无效:“”
请帮助实现我的输出。提前谢谢

我的预期产出是

     A   B
 0   1   1
 1   2   ''

不确定B列是否包含类似于
“X”
的内容,其中没有数字,因此我最后尝试使用
pd.to\u 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   

谢谢耶斯雷尔注意到我的错误

如果要提取
整数
s并为所有其他值获取相同的值,请使用带有
的自定义函数,尝试除

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
def(x):
尝试:
返回整数(x)
除值错误外:
返回x
df.B=df.B.replace(“^[^\d]*”,“”,regex=True)。fillna(“”)。apply(f)
打印(df)
A B
0  1  1
1  2  
打印(df.B.apply(类型))
0
1.
名称:B,数据类型:object

您希望如何使
int
列具有空
字符串
值?有没有理由不能是
NaN
?如果列可以是
object
类型,那么:
df.B=df.B.astype(str).str.replace(“^[^\d]*”,”)
,但是
1
将是一个
字符串
。如果它是
replace(“^[^\d]*”,”)之后的数值,我们可以将它转换为int,否则我只想
,“
没有整数,请通过
打印(df.B.apply)测试它(键入))
@jezrael ohhh我从OP的df开始,该df包含
str
。更新!相同的问题,测试它;)