Python 根据条件将数据帧列从字符串转换为Int

Python 根据条件将数据帧列从字符串转换为Int,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个看起来像 df 我想根据条件将“viz”列转换为0和1。我试过: df['viz'] = 0 if df['viz'] == "n" else 1 但我得到: ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 您试图将一个标量与您看到的引起ValueError的整个序列进行比较。一个简单的方法是将布尔级数转换为int: I

我有一个看起来像

df

我想根据条件将“viz”列转换为0和1。我试过:

df['viz'] = 0 if df['viz'] == "n" else 1
但我得到:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

您试图将一个标量与您看到的引起
ValueError
的整个序列进行比较。一个简单的方法是将布尔级数转换为
int

In [84]:
df['viz'] = (df['viz'] !='n').astype(int)
df

Out[84]:
   viz  a1_count  a1_mean     a1_std
0    0         3        2   0.816497
1    1         0      NaN        NaN
2    0         2       51  50.000000
In [90]:
(df['viz'] !='n').astype(int)

Out[90]:
0    0
1    1
2    0
Name: viz, dtype: int32
您也可以使用
np。其中

In [86]:
df['viz'] = np.where(df['viz'] == 'n', 0, 1)
df

Out[86]:
   viz  a1_count  a1_mean     a1_std
0    0         3        2   0.816497
1    1         0      NaN        NaN
2    0         2       51  50.000000
布尔比较的输出:

In [89]:
df['viz'] !='n'

Out[89]:
0    False
1     True
2    False
Name: viz, dtype: bool
然后强制转换到
int

In [84]:
df['viz'] = (df['viz'] !='n').astype(int)
df

Out[84]:
   viz  a1_count  a1_mean     a1_std
0    0         3        2   0.816497
1    1         0      NaN        NaN
2    0         2       51  50.000000
In [90]:
(df['viz'] !='n').astype(int)

Out[90]:
0    0
1    1
2    0
Name: viz, dtype: int32

根据@TMWP的上述评论:

pd.to_numeric(myDF['myDFCell',errors='concurve')


它就像一个符咒,是一个快速而简单的一句话

在研究某些东西时偶然发现了这篇文章。2年后,现在可能会有新的选择。在我的代码中,我刚刚使用了:
pd.to_numeric(myDF['myDFCell',errors='concurve')
。这可能是新的语法。强制标志告诉它将无法转换为数字的内容转换为NA,这样它就不会抛出错误。@TMWP这可能是真的,但OP不想将“n”转换为数字,在本例中会转换为
NaN
,因此这是一个稍微不同的用例。只是一个有用的补充。我是在研究如何将Pandas中的字符串列转换为数字列时读到这篇文章的。这是与stack overflow提出的问题最接近的问题。