为什么我从另一列的值创建另一个列基数时会收到“6”错误

问题描述

数据可以在这里找到https://github.com/dqc002/Learning/blob/main/Data%20gathered.csv

我正在尝试从另一列的值创建另一个列基数,但它给了我一个错误

KeyError                                  Traceback (most recent call last)
<ipython-input-79-4bdbdff831dc> in <module>
     14 
     15 
---> 16 data['STATUS'] = data['ACT-STATUS'].apply(lambda x: ACT[x])
     17 data

~\anacondafinal\envs\forcartopy\lib\site-packages\pandas\core\series.py in apply(self,func,convert_dtype,args,**kwds)
   4136             else:
   4137                 values = self.astype(object)._values
-> 4138                 mapped = lib.map_infer(values,f,convert=convert_dtype)
   4139 
   4140         if len(mapped) and isinstance(mapped[0],Series):

pandas\_libs\lib.pyx in pandas._libs.lib.map_infer()

<ipython-input-79-4bdbdff831dc> in <lambda>(x)
     14 
     15 
---> 16 data['STATUS'] = data['ACT-STATUS'].apply(lambda x: ACT[x])
     17 data

KeyError: '6'
data=pd.read_csv('Data gathered1.csv')
data

ACT = {'0': 'No Activity','1A' : 'CONTAMINATION CONFIRMED','1B' : 'CONTAMINATION CONFIRMED','2A' :'INVESTIGATION','2B': 'INVESTIGATION','3':'CORRECTIVE ACTION PLANNING','4': 'IMPLEMENT ACTION','5': 'MONITOR ACTION','6A':'ACTION COMPLETED','6B':'ACTION COMPLETED','6C': 'INACTIVE','6D': 'INACTIVE'
      }


   data['STATUS'] = data['ACT-STATUS'].apply(lambda x: ACT[x])
   data

解决方法

您可能想在这里使用“地图”。基于数据集,这里是通过 map-

的输入/输出
ACT = {'0': 'No Activity','1A' : 'CONTAMINATION CONFIRMED','1B' : 'CONTAMINATION CONFIRMED','2A' :'INVESTIGATION','2B': 'INVESTIGATION','3':'CORRECTIVE ACTION PLANNING','4': 'IMPLEMENT ACTION','5': 'MONITOR ACTION','6A':'ACTION COMPLETED','6B':'ACTION COMPLETED','6C': 'INACTIVE','6D': 'INACTIVE'
      }

df['ACT-STATUS 5.236'] = df['ACT-STATUS 5.236'].astype(str)
df['STATUS'] = df['ACT-STATUS 5.236'].map(ACT)
print(df[['ACT-STATUS 5.236','STATUS']])
  ACT-STATUS 5.236                   STATUS
0                0              No Activity
1                0              No Activity
2               2A            INVESTIGATION
3               2A            INVESTIGATION
4                6                      NaN
5               1A  CONTAMINATION CONFIRMED
6                6                      NaN
7                6                      NaN
8                6                      NaN
9              nan                      NaN
,

首先,您的 [Running] scala "c:\Users\ahmed\Desktop\scala\tempCodeRunnerFile.scala" Exception in thread "main" java.lang.IllegalArgumentException: name at java.base/jdk.internal.loader.URLClassPath$Loader.getResource(URLClassPath.java:636) at java.base/jdk.internal.loader.URLClassPath.getResource(URLClassPath.java:314) at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:455) at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:398) at scala.reflect.internal.util.RichClassLoader$.$anonfun$tryClass$extension$1(ScalaClassLoader.scala:47) at scala.util.control.Exception$Catch.$anonfun$opt$1(Exception.scala:245) at scala.util.control.Exception$Catch.apply(Exception.scala:227) at scala.util.control.Exception$Catch.opt(Exception.scala:245) at scala.reflect.internal.util.RichClassLoader$.tryClass$extension(ScalaClassLoader.scala:47) at scala.reflect.internal.util.ScalaClassLoader.tryToLoadClass(ScalaClassLoader.scala:41) at scala.reflect.internal.util.ScalaClassLoader.tryToLoadClass$(ScalaClassLoader.scala:119) at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.tryToLoadClass(ScalaClassLoader.scala:161) at scala.reflect.internal.util.ScalaClassLoader$.classExists(ScalaClassLoader.scala:189) at scala.tools.nsc.GenericRunnerCommand.guessHowToRun(GenericRunnerCommand.scala:43) at scala.tools.nsc.GenericRunnerCommand.<init>(GenericRunnerCommand.scala:62) at scala.tools.nsc.GenericRunnerCommand.<init>(GenericRunnerCommand.scala:25) at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:45) at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:108) at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala) [Done] exited with code=1 in 0.99 seconds 的列标题有一些空格,如 Data gathered.csv 和额外的数据,如 FILE NAME

ACT-STATUS 5.236

然后当你做 COUNTY,Division,FILE NAME,File Number,LOCATION,LATITUDE,LONGITUDE,CONTAMINANTS,DATE,ENF-STATUS,ACT-STATUS 5.236,Category 时,pandas 会将 data['ACT-STATUS'].apply(lambda x: ACT[x]) 列的值视为 ACT-STATUS,然后使用 x 作为 x 字典的键来查找值.但是,您的 ACT 字典没有键 ACT。所以它给了你错误。你可能想要

6

如果在 import numpy as np data['ACT-STATUS'].apply(lambda x: ACT.get(x,np.NaN)) 的键中找不到 ACT.get(x,np.NaN)NaN 将返回 x

ACT 给出以下结果

data['ACT-STATUS 5.236'].unique()

['0' '2A' '6' '1A' '4' '5' '4,5A' '2B' '3' '6C'] 也是一个大纲值。您可能需要想出一个解决方法来处理这个问题。