我有一列包含数字和单词的str类型:
前任。
['2','3','Amy','199','Happy']
我想转换所有的";str编号";into,并移除(具有的行(";str words";。
因此,我的预期输出将是如下列表:
[2, 3, 199]
由于我有一个pandas数据帧,并且它应该是其中一列,所以如果它可以是Series
,那就更好了,如下所示:
0 2.0
1 3.0
3 199.0
dtype: float64
正如您所提到的,您有一个列(一个系列(,所以假设它被称为s
:
s = pd.Series(['2', '3', 'Amy', '199', 'Happy'])
分配后,只需执行pd.to_numeric
并放入errors='coerce'
的参数。然后,用dropna
:移除NaN
print(pd.to_numeric(s, errors='coerce').dropna())
然后上述代码将输出:
0 2.0
1 3.0
3 199.0
dtype: float64
在提供阵列时不使用panda
import re
data = ['2','3','Amy','199','Happy']
for item in data:
print (*re.findall(r'd+',item))
将给出
2
3
199
和
import re
data = ['2','3','Amy','199','Happy']
out = []
for item in data:
m = str(*re.findall(r'd+',item))
if m != "":
out.append(int(m))
print (out)
将给出
[2, 3, 199]
您可以使用isnumeric来筛选非数字项。
s = pd.Series(['2','3','Amy','199','Happy'])
print(s[s.str.isnumeric()].astype(int))
输出:
0 2
1 3
3 199
dtype: int64