我有一个dataframe (在Python中),如下所示:
A B C D E F G H
0 T-1 2 3 - M-7 2 2
1 T-2 5 4 2 M-7 4 3
2 T-3 - - 3 M-7 9 4
3 T-4 6 - 4 M-7 - 9 5
4 T-5 - 1 5 M-7 8 6我想将破折号(,不包括A和E列中的)替换为NaN。
我尝试了df.replace('-', np.nan).It,最后也替换了A和E列的整个单元格。我想我可以使用df[column_name].replace('-',np.nan),但是我必须对每一列分别应用它。
有没有其他的方法,这是有效的,并将工作在任何数量的列有类似的限制?
发布于 2017-06-10 07:32:58
这应该能行。
df = pd.DataFrame({'A': list('abcde'),
'B': ['T-1', 'T-2', 'T-3', 'T-4', 'T-5'],
'C': ['a', '-', 'c', 'd', '-'],
'D': ['-', 'b', 'c', 'd', 'e'],
'E': ['M-7', 'M-7', 'M-7', 'M-7', 'M-7'],
'F': ['a', '-', 'c', '-', '-'],
'G': ['a', 'b', 'c', 'd', '-'],
'H': ['a', 'b', '-', 'd', '-']
})
df = df.astype(str)
s = df.applymap(lambda x: re.sub(r'^-$', str(np.NaN), x))输出:
A B C D E F G H
0 a T-1 a nan M-7 a a a
1 b T-2 nan b M-7 nan b b
2 c T-3 c c M-7 c c nan
3 d T-4 d d M-7 nan d d
4 e T-5 nan e M-7 nan nan nan发布于 2017-06-10 07:45:43
In [18]: df[df.columns.drop(['A','E'])] = \
df[df.columns.drop(['A','E'])].replace('-', np.nan)
In [19]: df
Out[19]:
A B C D E F G H
0 a T-1 a NaN M-7 a a a
1 b T-2 NaN b M-7 NaN b b
2 c T-3 c c M-7 c c NaN
3 d T-4 d d M-7 NaN d d
4 e T-5 NaN e M-7 NaN NaN NaN发布于 2022-10-16 17:47:05
只需使用df=df.replace('-',np.nan)
https://stackoverflow.com/questions/44470695
复制相似问题