用1替换Python Pandas Data Frame中的所有字符串类型

时间:2016-11-30 22:35:53

标签: python string pandas dataframe

这是一个奇怪的具体问题,但

如果我有一个看起来像的pandas数据框:

...
8                                                        0
9                                                        0
10                                                       0
11                                                       0
12                                                       0
13                                                    Dogs
14                                                    Cats
...

我需要它来查看所有字符串类型并将它们更改为1,所以:

...
8                                                        0
9                                                        0
10                                                       0
11                                                       0
12                                                       0
13                                                       1
14                                                       1
...

有没有办法让df.replace()看到字符串类型?

谢谢!

1 个答案:

答案 0 :(得分:3)

只要列中的其他值都是有效数值并且已经没有NaN值,您可以使用to_numeric将字符串值强制为数值,在这种情况下NaN

然后,您可以将NaN替换为1,但由于引入了NaNdtype已更改为float,因此我们需要案例使用astypedtypeint

In [6]:    
# read the data into our df
import pandas as pd
import io
​
t="""8                                                        0
9                                                        0
10                                                       0
11                                                       0
12                                                       0
13                                                    Dogs
14                                                    Cats"""
df = pd.read_csv(io.StringIO(t), delim_whitespace=True, header=None)
df

Out[6]:
    0     1
0   8     0
1   9     0
2  10     0
3  11     0
4  12     0
5  13  Dogs
6  14  Cats

现在转换字符串,将其替换为1并将Series dtype强制转换为int:

In [7]:
df[1] = pd.to_numeric(df[1], errors='coerce').fillna(1).astype(int)
df

Out[7]:
    0  1
0   8  0
1   9  0
2  10  0
3  11  0
4  12  0
5  13  1
6  14  1