python - 将列名转换为数字?

标签 python pandas encoding label encode

我在 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 中找到任何好的解决方案!

最佳答案

你可以这样做:

使用编码标签创建 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})

关于python - 将列名转换为数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50947115/

相关文章:

python - Pandas 将索引排序为整数

python - 反转 DataFrame 中的单个列

python - 如何有效计算 pandas 中所有后续行的平均值?

oracle - Oracle 中的 UTF-8 字符

python - 如何计算准确度的最佳阈值

python - 将 Python 列表值转换为 Json

python-3.x - 获取pandas数据框中子节点的所有直接中间和最终父节点

java - 猜测在 Java 中表示为 byte[] 的文本的编码

ruby-on-rails - Encoding::UndefinedConversionError ("\xE2"从 ASCII-8BIT 到 UTF-8):基于 ROR + MongoDB 的应用程序中的错误

python - Pandas 使用滚动总和和递减窗口创建新列