Pandas错误:__setitem__()无法将字典值识别为列名列表

编辑:看起来这是 Pandas 中的一个潜在错误。查看@NicMoetsch 提出的这个 GitHub问题,注意到使用字典值分配的意外行为与框架__setitem__()__getitem__().


在我之前的代码中,我用字典重命名了一些列:

cols_dict = {
     'Long_column_Name': 'first_column',
     'Other_Long_Column_Name': 'second_column',
     'AnotherLongColName': 'third_column'
}
for key, val in cols_dict.items():
    df.rename(columns={key: val}, inplace=True)

(我知道这里不需要循环——在我的实际代码中,我必须在数据帧列表中搜索数据帧的列,并获得字典键的子字符串匹配。)

后来我做了一些清理applymap(),索引字典值,它工作正常

pibs[cols_dict.values()].applymap(
    lambda x: np.nan if ':' in str(x) else x
)

但是当我尝试将切片分配回自身时,我收到一个关键错误(此处为完整错误消息)。

pibs[cols_dict.values()] = pibs[cols_dict.values()].applymap(
    lambda x: np.nan if ':' in str(x) else x
)
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~/.local/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   3079             try:
-> 3080                 return self._engine.get_loc(casted_key)
   3081             except KeyError as err:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: dict_values(['first_column', 'second_column', 'third_column'])

如果我将字典值转换为列表,代码运行良好

pibs[list(cols_dict.values())] = ...

所以我想我只是想知道为什么我能够使用字典值进行切片并applymap()在其上运行,但是当我转身并尝试将结果分配回数据帧时,我无法使用字典值进行切片。

简单地说:为什么 Pandascols_dict.values()在用于索引时会识别为列名列表,而在用于索引分配时则不会?

以上是Pandas错误:__setitem__()无法将字典值识别为列名列表的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>