Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列名转换为数字?_Python_Pandas_Encoding_Label_Encode - Fatal编程技术网

Python 将列名转换为数字?

Python 将列名转换为数字?,python,pandas,encoding,label,encode,Python,Pandas,Encoding,Label,Encode,我在pd数据帧中具有以下数据结构: 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)转换为数字并打印相应的列表,以便我以后可以看到哪个数字代表哪个字符串?请参阅我的上一篇文章以了解它的来源() 为什么?

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

    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
)转换为数字并打印相应的列表,以便我以后可以看到哪个数字代表哪个字符串?请参阅我的上一篇文章以了解它的来源()

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

Coded Label
0     ACT1
1     ACT2
2     ACT3
3     ACT4
4     ACT5
...
欢迎使用pandas或scikit学习中的任何好解决方案

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
Coded Label
0     ACT1
1     ACT2
2     ACT3
3     ACT4
4     ACT5
输出:

    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
Coded Label
0     ACT1
1     ACT2
2     ACT3
3     ACT4
4     ACT5
标签编码:

    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
Coded Label
0     ACT1
1     ACT2
2     ACT3
3     ACT4
4     ACT5
你可以这样做:

a = list(df)
a.remove('ID')
l = range(0,len(df.columns)-1)
df1 = pd.DataFrame({'Label': a, 'Coded':l})
使用编码标签创建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时,它似乎应用了字母顺序。我可以防止这种情况吗,即保持列的顺序?谢谢,我很感激!