【问题标题】:Pandas .loc returns key error for some labelsPandas .loc 返回某些标签的关键错误
【发布时间】:2019-03-22 09:11:39
【问题描述】:

我正在制作一个函数,该函数返回“id”以输入产品名称。


                   id
pName   
ZYMOFLAM D TAB 10s  1
ZYROP INJ 10000IU   2
ZYROP INJ 4000IU    3
ZYTANIX TAB 5MG 10s 4
ZYTEE RB GEL 10ML   5

df.loc['ZYTANIX TAB 5MG 10s']

返回

id    4
Name: ZYTANIX TAB 5MG 10s, dtype: int64

但是df.loc['ZYTEE RB GEL 10ML'] 返回 KeyError

为什么会这样?

【问题讨论】:

  • 检查print (df.index.tolist()),可能是traling whitespace,然后需要df.index = df.index.str.strip()
  • (['ZYMOFLAM D TAB 10s', 'ZYROP INJ 10000IU', 'ZYROP INJ 4000IU', 'ZYTANIX TAB 5MG 10s', 'ZYTEE RB GEL 10ML']) 没有尾随空格。跨度>
  • 那就不知道了。它应该工作得很好。
  • @jezrael 感谢您提供帮助。项目名称中的单词之间是否存在无法识别的空格?
  • 如果使用 df.index = df.index.str.strip() 有帮助吗?

标签: python pandas data-science


【解决方案1】:

我认为在应用任何切片方法之前,您应该先进行清理部分并重新创建数据框。要删除和尾随空格或单词之间的额外空格,您可以执行以下操作:

df = df.reset_index()
df['pName'] = df.pName.apply(lambda x: ' '.join(x.strip().split(' ')))
df = df.set_index('pName')

现在试试

df.loc['ZYTEE RB GEL 10ML']

【讨论】:

  • 这个apply函数把所有的标签都变成了NAN
  • 现在我正在通过替换两者之间的所有空格来解决问题。 (df['pName'] = df['pName'].str.replace(" ",""))。这不会引发关键错误。但我仍然需要用空格找到正确的解决方案。
  • 抱歉,出现错误。我已经更新了代码。希望它现在可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 2018-11-13
  • 2022-06-20
  • 1970-01-01
  • 2013-05-17
  • 2018-02-17
相关资源
最近更新 更多