我试图做一些数据清理,并使用pandas 'itertuples'函数来生成命名元组以存储在 Dataframe 中。然而,当我使用itertuples时,名为'class'的列在命名元组中存储为'_1',而所有其他列名都正确转换。例如,'subclass'列正确转换为命名元组中的'subclass'。
一行代码和输出如下:
ipcs.rename(columns={'ipc_section':'section',
'ipc_class':'class',
'ipc_subclass':'subclass',
'ipc_main_group':'group',
'ipc_subgroup':'subgroup',
'ipc_sequence':'order'}, inplace=True)
[item for item in
ipcs[['section','class', 'subclass', 'group', 'subgroup', 'order']]
.itertuples(index=False,name='IPC')]
Out[45]:
[IPC(section='A', _1='61', subclass='F', group='9', subgroup='00', order='0')]
字符串
这是怎么回事?我假设这与Python中的关键字class有关。有什么方法可以解决这个问题吗?
2条答案
按热度按时间lx0bsm1f1#
在namedtuples和itertuples的文档中找到了答案。
从namedtuples文档中,我们可以找到以下内容。
完整的namedtuple函数是:
字符串
文件中说:“如果 rename 为true,则无效字段名将自动替换为位置名称。例如,”abc“,”“def”,“”ghi“,”“abc”]将转换为“”abc“,”"_1“,”“ghi”,“”_3“],从而消除关键字def和重复字段名abc。”
在Pandas itertuples 函数的文档中,我们可以看到以下内容:
型
因此,如果我们为元组指定一个名称(因此使其成为一个命名元组而不是普通元组),我们会触发此函数,Pandas函数将 rename 参数指定为True,因此它会自动将无效字段名称'class'转换为位置名称。
请注意,这与@chepner对这个问题的评论略有不同。具体来说,可以使用“class”作为列名(将'ipc_class'设置为'class'作为列名确实有效)但是itertuples函数将 rename 参数设置为True,因此当列名传递给itertuples时,字段名称将更改为位置名称。如果 rename 设置为False,则 * namedtuple* 函数会抛出错误。
o2rvlv0m2#
只需更改
columns
属性中的名称,以避免与Python保留关键字冲突。字符串