【问题标题】:Convert Pandas DataFrame Column From String to Int Based on Conditional根据条件将 Pandas DataFrame 列从 String 转换为 Int
【发布时间】:2015-08-03 14:44:54
【问题描述】:

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

df

viz  a1_count  a1_mean     a1_std
n         3        2   0.816497
y         0      NaN        NaN 
n         2       51  50.000000

我想根据条件将“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().

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您正在尝试将标量与引发您看到的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
    

    你也可以使用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
    

    布尔比较的输出:

    In [89]:
    df['viz'] !='n'
    
    Out[89]:
    0    False
    1     True
    2    False
    Name: viz, dtype: bool
    

    然后投射到int:

    In [90]:
    (df['viz'] !='n').astype(int)
    
    Out[90]:
    0    0
    1    1
    2    0
    Name: viz, dtype: int32
    

    【讨论】:

    • 在研究某些东西时偶然发现了这篇文章。 2年后,现在可能会有新的选择。在我的代码中只使用了这个:pd.to_numeric(myDF['myDFCell'], errors='coerce')。这可能是较新的 pandas 语法。 coerce 标志告诉它将不能转换为数字的转换为 NA,这样它就不会抛出错误。
    • @TMWP 这可能是真的,但 OP 不想将 'n' 转换为在这种情况下会转换为 NaN 的数字,所以这里的用例略有不同
    • 对。只是一个有用的补充。我在研究如何将 Pandas 中的字符串列转换为数字时来到这篇文章。这是堆栈溢出提出的最接近该问题的问题。
    【解决方案2】:

    来自@TMWP 上面的评论:

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

    它的作用就像一个魅力,是一种快速简单的单衬里

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 2022-01-13
      • 1970-01-01
      • 2017-05-29
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      相关资源
      最近更新 更多