将 Python Pandas 数据框中的所有字符串类型替换为 1

Loi*_*ler 3 python string dataframe pandas

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

如果我有一个 pandas 数据框,如下所示:

...
8                                                        0
9                                                        0
10                                                       0
11                                                       0
12                                                       0
13                                                    Dogs
14                                                    Cats
...
Run Code Online (Sandbox Code Playgroud)

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

...
8                                                        0
9                                                        0
10                                                       0
11                                                       0
12                                                       0
13                                                       1
14                                                       1
...
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

EdC*_*ica 5

只要列中的其他值都是有效的数值并且还没有任何NaN值,您就可以使用to_numeric来将字符串值强制转换为数值,在本例中为NaN

\n\n

然后您可以替换NaN1,但由于 的引入NaNdtype被更改为因此我们需要使用来float区分:dtypeintastype

\n\n
In [6]:    \n# read the data into our df\nimport pandas as pd\nimport io\n\xe2\x80\x8b\nt="""8                                                        0\n9                                                        0\n10                                                       0\n11                                                       0\n12                                                       0\n13                                                    Dogs\n14                                                    Cats"""\ndf = pd.read_csv(io.StringIO(t), delim_whitespace=True, header=None)\ndf\n\nOut[6]:\n    0     1\n0   8     0\n1   9     0\n2  10     0\n3  11     0\n4  12     0\n5  13  Dogs\n6  14  Cats\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
In [7]:\ndf[1] = pd.to_numeric(df[1], errors=\'coerce\').fillna(1).astype(int)\ndf\n\nOut[7]:\n    0  1\n0   8  0\n1   9  0\n2  10  0\n3  11  0\n4  12  0\n5  13  1\n6  14  1\n
Run Code Online (Sandbox Code Playgroud)\n