【问题标题】:Converting column names to numbers?将列名转换为数字?
【发布时间】:2018-06-20 11:25:18
【问题描述】:

我在 pd DataFrame 中有以下数据结构:

    ID  ACT1 ACT2 ACT3 ACT4 ACT5
1   0   0    1    1    1    1
2   1   1    0    0    0    0
3   2   1    1    0    1    0

ACT 是此处活动的短期术语,其中原始数据的描述比 ACTx 长。

问题:是否可以将列名(ID 除外)转换为数字并打印相应的列表,以便我以后可以看到哪个数字代表哪个字符串?请参阅我的上一篇文章以了解它的来源 (Split or merge actions by date)

    ID  0    1    2    3    4
1   0   0    1    1    1    1
2   1   1    0    0    0    0
3   2   1    1    0    1    0

为什么?我想创建一个序列数据库,为了为以后的计算节省一些内存,我喜欢使用编码标签。理想情况下,我可以调用一个表,列出每个对应的编码标签和真实标签。

Coded Label
0     ACT1
1     ACT2
2     ACT3
3     ACT4
4     ACT5
...

欢迎使用 pandas 或 scikit learn 中的任何好的解决方案!

【问题讨论】:

    标签: python pandas encoding label encode


    【解决方案1】:

    你可以这样做:

    使用编码标签创建一个 df:

    l = range(0,len(df.columns)-1)
    a = list(df[df.columns.difference(['ID'])])
    df1 = pd.DataFrame({'Label': a, 'Coded':l})
    
       Coded Label
    0      0  ACT1
    1      1  ACT2
    2      2  ACT3
    3      3  ACT4
    4      4  ACT5
    

    然后重命名列:

    df = df.rename(columns=dict(zip(df1["Label"], df1["Coded"])))
    
       ID  0  1  2  3  4
    1   0  0  1  1  1  1
    2   1  1  0  0  0  0
    3   2  1  1  0  1  0
    

    编辑

    要保持列的顺序,您可以这样做:

    a = list(df)
    a.remove('ID')
    l = range(0,len(df.columns)-1)
    df1 = pd.DataFrame({'Label': a, 'Coded':l})
    

    【讨论】:

    • 似乎它在我输出 df1 时应用了字母顺序。我可以防止这种情况发生吗,即保持列的顺序?
    • 谢谢,非常感谢!
    【解决方案2】:
    df = pd.DataFrame({'ID':['0','1','2'],'ACT1':['0','1','1'],'ACT2':['1','0','1'],'ACT3':['1','0','0'],'ACT4':['1','0','1'],'ACT5':['1','0','0']})
    col = {x:y for x,y in zip(df.columns.difference(['ID']),range(0,len(df.columns)-1))}
    label_coded = pd.DataFrame(list(col.items()), columns=['Label', 'Coded'])
    df = df.rename(columns=col)
    

    输入:

        ACT1    ACT2    ACT3    ACT4    ACT5    ID
     0     0       1       1       1       1     0
     1     1       0       0       0       0     1
     2     1       1       0       1       0     2
    

    输出:

        0   1   2   3   4   ID
    0   0   1   1   1   1   0
    1   1   0   0   0   0   1
    2   1   1   0   1   0   2
    

    label_coded:

    Coded Label
    0     ACT1
    1     ACT2
    2     ACT3
    3     ACT4
    4     ACT5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2019-09-16
      • 2021-07-17
      • 2019-06-06
      相关资源
      最近更新 更多