gpt4 book ai didi

python - 通过for循环和exec()创建一系列映射

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:52 24 4
gpt4 key购买 nike

我正在使用 pandas 0.20.1 和 Python 3.6。
首先请检查我的示例:
假设我有一个名为 a 的数据框:

  up  down
0 a high
1 a low
2 b low
3 c high

每列都有一些字符串。我想要做的是将这些字符串转换为数字,并将每列的映射存储在数据框中。即:

  up down
0 0 0
1 0 1
2 1 1
3 2 0

并将映射存储在两个以column_name + '_code'格式命名的数据帧中。在我的示例中,它们是up_codedown_code>:

  up  up_id
0 a 0
1 b 1
2 c 2

down down_id
0 high 0
1 low 1

我尝试过的是:

cols = ['up', 'down']
for col in cols:
exec("%(k)s_code = pd.DataFrame({%(k)s:a[col].unique(), %(k)s_id:range(len(a[col].unique()))})" % {'k':col})

我预计这会创建存储映射的数据帧,但它引发了名称错误:

Traceback (most recent call last):

File "<ipython-input-81-7fc8a22fc7f1>", line 2, in <module>
exec("%(k)s_code = pd.DataFrame({%(k)s:a[col].unique(), %(k)s_id:range(len(a[col].unique()))})" % {'k':col})

File "<string>", line 1, in <module>

NameError: name 'up' is not defined

我在这里做错了什么?或者有更简单的实现方法吗?

最佳答案

Dict 的键必须是字符串、数字或分配有某些内容的变量。在您的情况下,当您使用 exec 方法时,会创建变量,因此请将代码 (k)s(k)s_id 更改为 '(k)s''(k)s_id'

cols = ['up', 'down']
for col in cols:
exec("%(k)s_code = pd.DataFrame({'%(k)s':a[col].unique(), '%(k)s_id':range(len(a[col].unique()))})" % {'k':col})

关于python - 通过for循环和exec()创建一系列映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45904706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com