gpt4 book ai didi

pandas - str.replace 函数创建 NaN 数据

转载 作者:行者123 更新时间:2023-12-01 01:51:49 25 4
gpt4 key购买 nike

我正在尝试替换 Pandas 列中的某些字符串,但得到 NaN对于某些行。该列是一种对象数据类型。

我想要所有带有 'n' 的行在字符串中替换为 'N'和所有行 's'在字符串中替换为 'S' .换句话说,我试图在出现时将字符串大写。

但是,我收到了 NaN没有 'n' 的行的值或 's'在字符串中。 如何更换 'n''s'没有得到NaN对于其他值?

这是我的数据框的头部:

data_frame['column_name'].head(10)
0 1n
1 1n
2 1n
3 1n
4 2n
5 2s
6 3
7 3
8 4s
9 4s

替换后,字符串 '3'现在是 NaN :
data_frame['column_name'] = data_frame['column_name'].str.replace('n', 'N')
data_frame['column_name'] = data_frame['column_name'].str.replace('s', 'S')

data_frame['column_name'].head(10)
Out[87]:
0 1N
1 1N
2 1N
3 1N
4 2N
5 2S
6 NaN
7 NaN
8 4S
9 4S
Name: NCU, dtype: object

如果我可以添加更多信息,请告诉我。

最佳答案

最简单的解决方案是将列转换为 string - 那么可以使用 str.upperstr.replace :

data_frame['column_name'] = data_frame['column_name'].astype(str)
data_frame['column_name'] = data_frame['column_name'].str.replace('n', 'N')
data_frame['column_name'] = data_frame['column_name'].str.replace('s', 'S')
print (data_frame)
column_name
0 1N
1 1N
2 1N
3 1N
4 2N
5 2S
6 3
7 3
8 4S
9 4S

但如果需要将数字和字符串放在一起 :

我想你需要 Series.replace ,因为您有混合值 - 带字符串的数字和 str.replace 返回 NaN其中数值(bur 使用 mask 使用另一个解决方案):
data_frame['column_name'] = data_frame['column_name'].replace(['n', 's'],
['S','N'],
regex=True)
print (data_frame)
column_name
0 1S
1 1S
2 1S
3 1S
4 2S
5 2N
6 3
7 3
8 4N
9 4N

另一种解决方案是仅过滤器 string并使用 Series.mask str.upper :
mask = data_frame['column_name'].apply(type) == str
data_frame['column_name'] = data_frame['column_name'].mask(mask,
data_frame['column_name'].str.upper())
print (data_frame)
column_name
0 1N
1 1N
2 1N
3 1N
4 2N
5 2S
6 3
7 3
8 4S
9 4S

另一种解决方案是更换 NaN来自 combine_first fillna :
upper = data_frame['column_name'].str.upper()
data_frame['column_name'] = upper.combine_first(data_frame['column_name'])
#alternative solution
#data_frame['column_name'] = upper.fillna(data_frame['column_name'])
column_name
0 1N
1 1N
2 1N
3 1N
4 2N
5 2S
6 3
7 3
8 4S
9 4S

关于pandas - str.replace 函数创建 NaN 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43855860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com