如何用NaN替换python数据框中的破折号?

dra*_*d07 5 python nan dataframe pandas

我有一个数据框(在 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
Run Code Online (Sandbox Code Playgroud)

我想用.替换破折号(不包括A和E列中的破折号)NaN

我试过了。df.replace('-', np.nan)它最终也替换了 A 列和 E 列的整个单元格。我想我可以使用,df[column_name].replace('-',np.nan)但我必须分别为每一列应用它。

有没有其他有效的方法可以用于具有类似限制的任意数量的列?

Ril*_*Hun 1

这应该有效。

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))
Run Code Online (Sandbox Code Playgroud)

输出:

   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
Run Code Online (Sandbox Code Playgroud)