将列名转换为数字?
Converting column names to numbers?
我在 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 是此处 activity 的短期术语,其中原始数据的描述比 ACTx 长得多。
问题:是否可以将列名(ID
除外)转换为数字并打印相应的列表,以便稍后查看哪个数字代表哪个字符串?查看我的最后一个 post 以了解它的来源 ()
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
为什么?我想创建一个序列数据库,为了为以后的计算节省一些内存,我喜欢使用编码标签。理想情况下,我可以调用 table,列出每个对应的编码标签和真实标签。
Coded Label
0 ACT1
1 ACT2
2 ACT3
3 ACT4
4 ACT5
...
欢迎在pandas或scikit learn中提供任何好的解决方案!
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
你可以这样做:
创建带有编码标签的 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})
我在 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 是此处 activity 的短期术语,其中原始数据的描述比 ACTx 长得多。
问题:是否可以将列名(ID
除外)转换为数字并打印相应的列表,以便稍后查看哪个数字代表哪个字符串?查看我的最后一个 post 以了解它的来源 (
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
为什么?我想创建一个序列数据库,为了为以后的计算节省一些内存,我喜欢使用编码标签。理想情况下,我可以调用 table,列出每个对应的编码标签和真实标签。
Coded Label
0 ACT1
1 ACT2
2 ACT3
3 ACT4
4 ACT5
...
欢迎在pandas或scikit learn中提供任何好的解决方案!
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
你可以这样做:
创建带有编码标签的 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})