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
。更新!相同的问题,测试它;)