我正在尝试替换 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
Run Code Online (Sandbox Code Playgroud)
替换后,字符串'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
Run Code Online (Sandbox Code Playgroud)
如果我可以添加更多信息,请告诉我。
最简单的解决方案是将列转换为string- 然后可以使用str.upper或str.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
Run Code Online (Sandbox Code Playgroud)
但是如果需要数字和字符串一起:
我认为您需要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
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是仅过滤器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
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是替换NaN为combine_firstor 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4637 次 |
| 最近记录: |