cj20n sap 报错未知列的名称_sort_values()报错的原因?

在尝试使用pandas的sort_values()函数对价税合计列进行排序时遇到错误。问题出在对sort_values参数的理解不准确。当参数by不是一个列名或列名列表时,而是变成了一个DataFrame,导致错误。正确做法是为多层级索引的DataFrame指定列名元组,如('价税合计','2020')。通过这个修正,解决了问题,也提醒了在自学过程中要注意基础知识的系统性和扎实性,避免留下知识盲点。" 128576654,11746184,APlayer夜间模式适配 Fluid主题配置,"['前端开发', 'CSS', '音乐插件']
摘要由CSDN通过智能技术生成

729dbf359d95cd05d803be597008381c.png

数据情况:

>>> df=pd.read_excel('/Users/dxn/Desktop/结果.xlsx',header=[0,1])
>>> df
     Unnamed: 0_level_0               物料名称  ...       价税合计           
                     日期 Unnamed: 1_level_1  ...       2019      2020
0                   536             胶质  ...  4081450.0  3426400.0
1                    70     甲基-2(1H)  ...        NaN  1022700.0
2                   456           氢苯二甲酸  ...   645000.0   825100.0
3                   985       梨酯  ...  1200000.0   720000.0
4                   494        微晶纤维素  ...    94150.0   448000.0
...                 ...                ...  ...        ...        ...
1213               1207                高碘酸  ...        NaN        NaN

想对价税合计一列重新排序,

>>> df.sort_values(by=df.loc[:,pd.IndexSlice[:,'2020']],inplace=True)

但报错了,却不明白原因。

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    df.sort_values(by=df.loc[:,pd.IndexSlice[:,'2020年']],inplace=True)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/frame.py", line 5293, in sort_values
    k = self._get_label_or_level_values(by, axis=axis)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/generic.py", line 1560, in _get_label_or_level_values
    raise KeyError(key)
KeyError:            价税合计
          2020年
0     3426400.0
1     1022700.0
2      825100.0
3      720000.0
4      448000.0
...         ...
1213        NaN
1214        NaN
1215        NaN
1216        NaN
1217        NaN

[1218 rows x 1 columns]

经过不断试错,终于查找到了原因。

上面出现的错误,原因在于对sort_values()参数,理解并不透彻。

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)[source]¶
Sort by the values along either axis.

Parameters
by: str or list of str

第一个参数by是str or list of str,默认是列名或列名列表;如果设置axis=1时,by应是行索引名或行索引名列表。

by=df.loc[:,pd.IndexSlice[:,'2020']],这里by参数已经不是列名了,而是一个指定列名下的DataFrame了,成了一个非合法的参数了。对于多层级索引的DataFrame,指定列的列名获取,一个元组就可以了:('价税合计','2020');那么以此元组作为by的参数,问题就迎刃而解了。

>>> df.sort_values(by=('价税合计','2020'),inplace=True)
>>> df
     Unnamed: 0_level_0               物料名称   价税合计  ...                  
                     日期 Unnamed: 1_level_1   2015  ...   2018 2019 2020
499                 504               抗坏血酸    NaN  ...   10.0  NaN  12.0
498                 621               氨基磺酸    NaN  ...    NaN  NaN  15.0
497                 955              结晶碳酸钠   10.0  ...    NaN  NaN  16.0
496                 557          柠檬酸三钠(AR)    NaN  ...    NaN  NaN  17.0
495                 143               三氯化铁    NaN  ...    NaN  NaN  18.0
...                 ...                ...    ...  ...    ...  ...   ...
1213               1207                高碘酸    NaN  ...    NaN  NaN   NaN
1214               1208               高碘酸钠  332.0  ...  170.0  NaN   NaN

这个时候来看,出现的报错问题是非常简单的,简单到自己都觉得自己实在是十足的愚笨,竟然让这么个小问题折磨了一天的时间。还好,在不长的时间里找到了原因,心里豁然开朗,顿感心旷神怡。

在自学的道路上,因为学的不系统、不扎实,一个不小心、一个小疏忽,就会给自己埋下大坑。一路过来,时不时会遇到类似的问题,需要不断回头再学习再加深,以填补之前学习不到位的空白,以这种渐进的方式,在反复中不断完成对目标的完整认识与掌握。你会问,这样你累不?累!

但我乐意!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值