基于条件将Pandas DataFrame列从String转换为Int

Ada*_*m_G 20 python dataframe pandas

我有一个看起来像的数据框

DF

viz  a1_count  a1_mean     a1_std
n         3        2   0.816497
y         0      NaN        NaN 
n         2       51  50.000000
Run Code Online (Sandbox Code Playgroud)

我想基于条件将"viz"列转换为0和1.我试过了:

df['viz'] = 0 if df['viz'] == "n" else 1
Run Code Online (Sandbox Code Playgroud)

但我得到:

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

EdC*_*ica 18

你试图将一个标量与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
Run Code Online (Sandbox Code Playgroud)

您还可以使用np.where:

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

布尔比较的输出:

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

Out[89]:
0    False
1     True
2    False
Name: viz, dtype: bool
Run Code Online (Sandbox Code Playgroud)

然后投射到int:

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

Out[90]:
0    0
1    1
2    0
Name: viz, dtype: int32
Run Code Online (Sandbox Code Playgroud)

  • 在研究某事时偶然发现了这篇文章.2年后,现在可能有新的选择.在我的代码中使用了这个:`pd.to_numeric(myDF ['myDFCell'],errors ='coerce')`.这可能是更新的熊猫语法.强制标志告诉它将无法转换为数字的数字转换为NA,这样就不会抛出错误. (3认同)