【问题标题】:Converting boolean to zero-or-one, for all elements in an array对于数组中的所有元素,将布尔值转换为零或一
【发布时间】:2018-12-12 10:13:25
【问题描述】:

我有以下布尔列数据集

            date     hr  energy
0     5-Feb-18  False   False
1    29-Jan-18  False   False
2     6-Dec-17   True   False
3    16-Nov-17  False   False
4    14-Nov-17   True    True
5    25-Oct-17  False   False
6    24-Oct-17  False   False
7     5-Oct-17  False   False
8     3-Oct-17  False   False
9    26-Sep-17  False   False
10   13-Sep-17   True   False
11    7-Sep-17  False   False
12   31-Aug-17  False   False

我想将每个布尔列乘以 1 以将其变为虚拟列

我试过了:

df = df.iloc[:, 1:]

for col in df:
    col = col*1

但列仍然是布尔值,为什么?

【问题讨论】:

    标签: pandas loops boolean


    【解决方案1】:

    只是使用

    df.iloc[:,1:]=df.iloc[:,1:].astype(int)
    df
    Out[477]: 
             date  hr  energy
    0    5-Feb-18   0       0
    1   29-Jan-18   0       0
    2    6-Dec-17   1       0
    3   16-Nov-17   0       0
    4   14-Nov-17   1       1
    5   25-Oct-17   0       0
    6   24-Oct-17   0       0
    7    5-Oct-17   0       0
    8    3-Oct-17   0       0
    9   26-Sep-17   0       0
    10  13-Sep-17   1       0
    11   7-Sep-17   0       0
    12  31-Aug-17   0       0
    

    【讨论】:

    • @Filippo,温的回答非常好。它不仅可以进行您想要的转换,还可以显示矢量化处理,这意味着在单个指令中而不是 FOR 循环中执行整个列。矢量化处理执行起来更快、更简洁,通常更易于理解/调试,因此通常尽可能首选。
    【解决方案2】:

    对于 True 或 False 以外的未来情况,如果您想将分类转换为数值,您可以随时使用替换功能。

        df.iloc[:,1:]=df.iloc[:,1:].replace({True:1,False:0})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-29
      • 2018-12-02
      • 2021-03-06
      • 1970-01-01
      • 2014-12-20
      • 2016-01-13
      • 1970-01-01
      • 2016-07-17
      相关资源
      最近更新 更多