Pandas: str.extract()给出意外的NaN



我有一个数据集,它有一个列,看起来像这样

Badge Number
1
3
23 / gold
22 / silver
483

我只需要数字。下面是我的代码:

df = pd.read_excel('badges.xlsx')
df['Badge Number'] = df['Badge Number'].str.extract('(d+)')
print(df)

我期望输出如下:

Badge Number
1
3
23
22
483

但是我得到了

Badge Number
Nan
Nan
23
22
Nan

为了进行测试,我将数据帧转储为.csv文件,并使用pd.read_csv()将其读取回来。这给了我需要的数字(当然这不是一个解决方案)

我也试过

df['Badge Number'] = np.where(df['Badge Number'].str.isnumeric(), df['Badge Number'], df['Badge Number'].str.extract('(d+)'))

但这只给了我所有的15。我知道我在尝试一些我根本不理解的事情,但我希望有一个直接的解决方案。

这几乎可以肯定,因为这些数字实际上是整数,而不是字符串。尝试用原始数字填充缺失的值。

df['Badge Number'] = df['Badge Number'].str.extract('(d+)')[0].fillna(df['Badge Number'])#.astype(int)

另一个选择是在读取XLS时,将列指定为string。

使用dtype={'Badge Number': str}

df = pd.read_excel('badges.xlsx',dtype={'Badge Number': str})
df['Badge Number'] = df['Badge Number'].str.extract('(\d+)')

expand添加到False

df['Badge Number'] = df['Badge Number'].astype(str).str.extract('(d+)',expand=False)
df
Out[412]: 
Badge Number
0            1
1            3
2           23
3           22
4          483

最新更新