Pandas DataFrame将除0之外的每个值替换为1

时间:2014-07-30 04:46:39

标签: python replace pandas dataframe

我有一个像下面这样的pandas DataFrame。

3,0,1,0,0
11,0,0,0,0
1,0,0,0,0
0,0,0,0,4
13,1,1,5,0

我需要将除了'0'之外的所有其他值替换为'1'。所以我的预期输出。

1,0,1,0,0
1,0,0,0,0
1,0,0,0,0
0,0,0,0,1
1,1,1,1,0

2 个答案:

答案 0 :(得分:6)

只需使用df[df != 0]之类的内容即可获得数据框的非零部分:

import pandas as pd
import numpy as np
np.random.seed(123)

df = pd.DataFrame(np.random.randint(0, 10, (5, 5)), columns=list('abcde'))
df
Out[11]: 
   a  b  c  d  e
0  2  2  6  1  3
1  9  6  1  0  1
2  9  0  0  9  3
3  4  0  0  4  1
4  7  3  2  4  7

df[df != 0] = 1
df
Out[13]: 
   a  b  c  d  e
0  1  1  1  1  1
1  1  1  1  0  1
2  1  0  0  1  1
3  1  0  0  1  1
4  1  1  1  1  1

答案 1 :(得分:0)

作为一种非正统的选择,请考虑

%timeit (df/df == 1).astype(int)
1000 loops, best of 3: 449 µs per loop
%timeit df[df != 0] = 1
1000 loops, best of 3: 801 µs per loop

作为提示,此处发生了什么:df/df1提供了0以外的任何值Inf==1。检查{{1}}会给出正确的矩阵,但是采用二进制形式 - 因此最后会进行转换。

然而,随着数据帧大小的增加,不必选择但只是对所有元素进行操作的优势变得无关紧要 - 最终你效率会降低。