KeyError:尝试使用DEF时为0

问题描述 投票:0回答:1

我是新来的,正在练习python,但我无法使用它。

我有一个具有6列和多行的DF,它们都是dtype float64。

我创建了一个def,以便执行此操作:

def completar_datos (var1,var2,var3,var4,var5,var6):
n = len(df5)
for i in range(n):
    if df5[var1][i]+df5[var2][i]+df5[var3][i] < 100 :
        df5[var4][i]= 100*df5[var1][i]/df5[var1][i]+df5[var2][i]+df5[var3][i]
        df5[var5][i]= 100*df5[var2][i]/df5[var1][i]+df5[var2][i]+df5[var3][i]
        df5[var6][i]= 100*df5[var3][i]/df5[var1][i]+df5[var2][i]+df5[var3][i]   

基本上,我想要的是该循环,解决该操作并保存它。

但是,我收到此错误,不知道该怎么办:

KeyError                                  Traceback (most recent call last)
<ipython-input-22-dfad1d30cb75> in <module>
----> 1 completar_datos('Health_exp_out_of_pocket_pct_2016','Health_exp_public_pct_2016','External_health_exp_pct_2016','Health_exp_Out_Pocket','Health_exp_Public','External_Health_exp')

<ipython-input-21-c5a069ca4dca> in completar_datos(var1, var2, var3, var4, var5, var6)
      2     n = len(df5)
      3     for i in range(n):
----> 4         if df5[var1][i]+df5[var2][i]+df5[var3][i] < 100 :
      5             df5[var4][i]= 100*df5[var1][i]/df5[var1][i]+df5[var2][i]+df5[var3][i]
      6             df5[var5][i]= 100*df5[var2][i]/df5[var1][i]+df5[var2][i]+df5[var3][i]

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key)
    869         key = com.apply_if_callable(key, self)
    870         try:
--> 871             result = self.index.get_value(self, key)
    872 
    873             if not is_scalar(result):

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key)
   4402         k = self._convert_scalar_indexer(k, kind="getitem")
   4403         try:
-> 4404             return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))
   4405         except KeyError as e1:
   4406             if len(self) > 0 and (self.holds_integer() or self.is_boolean()):

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 0

关于如何解决此问题的任何想法?如果您听不懂,请问我,这是我的第一篇文章。

谢谢!

python pandas function dataframe keyerror
1个回答
0
投票

您不想以这种方式在数据帧上循环。定义一个函数并将其应用于列或整个数据框。有关详细信息,请参见apply的熊猫文档。

您的错误来源似乎是pandas正在寻找名称为0的列,并且该名称不存在,因此会引发KeyError。您正在尝试在数据帧上使用数组下标。如果要访问数据框的行和列,请使用df.locdf.iloc

© www.soinside.com 2019 - 2024. All rights reserved.