Python 2.7 KeyError:不在索引中,使用从自身数据帧生成的键
我在Python 2.7 KeyError:不在索引中,使用从自身数据帧生成的键,python-2.7,pandas,keyerror,Python 2.7,Pandas,Keyerror,我在PandasDataFrame中有两列,它的索引是datetime。这两列包含测量相同参数的数据,但两列都不完整(有些行根本没有数据,有些行在两列中都有数据,另一些行在“a”或“b”列中有数据) 我编写了以下代码来查找列中的间隙,生成这些间隙出现的日期索引列表,并使用此列表查找和替换丢失的数据。但是我在第3行得到了一个KeyError:notin index,我不明白,因为我用来索引的键来自数据帧本身。有人能解释一下为什么会发生这种情况,以及我能做些什么来解决它吗?代码如下: def mer
Pandas
DataFrame
中有两列,它的索引是datetime
。这两列包含测量相同参数的数据,但两列都不完整(有些行根本没有数据,有些行在两列中都有数据,另一些行在“a”或“b”列中有数据)
我编写了以下代码来查找列中的间隙,生成这些间隙出现的日期索引列表,并使用此列表查找和替换丢失的数据。但是我在第3行得到了一个KeyError:notin index
,我不明白,因为我用来索引的键来自数据帧本身。有人能解释一下为什么会发生这种情况,以及我能做些什么来解决它吗?代码如下:
def merge_func(df):
null_index = df[(df['DOC_mg/L'].isnull() == False) & (df['TOC_mg/L'].isnull() == True)].index
df['TOC_mg/L'][null_index] = df[null_index]['DOC_mg/L']
notnull_index = df[(df['DOC_mg/L'].isnull() == True) & (df['TOC_mg/L'].isnull() == False)].index
df['DOC_mg/L'][notnull_index] = df[notnull_index]['TOC_mg/L']
df.insert(len(df.columns), 'Mean_mg/L', 0.0)
df['Mean_mg/L'] = (df['DOC_mg/L'] + df['TOC_mg/L']) / 2
return df
merge_func(sve)
当您考虑执行作业时,应使用.loc
:
df.loc[null_index,'TOC_mg/L']=df['DOC_mg/L']
df.loc[null_index,'TOC_mg/L']=df['DOC_mg/L']
df.loc[notnull_index, 'DOC_mg/L'] = df['TOC_mg/L']
原始代码中的错误是索引查找下标值的顺序:
df['TOC_mg/L'][null_index] = df[null_index]['DOC_mg/L']
将产生索引错误,我在玩具数据集上得到错误:indexer错误:索引超出范围
如果您将顺序更改为此,它可能会起作用:
df['TOC_mg/L'][null_index] = df['DOC_mg/L'][null_index]
但是,这是链式分配,应该避免,请参见
因此,您应该使用loc
:
df.loc[null_index,'TOC_mg/L']=df['DOC_mg/L']
df.loc[null_index,'TOC_mg/L']=df['DOC_mg/L']
df.loc[notnull_index, 'DOC_mg/L'] = df['TOC_mg/L']
请注意,不必为rhs使用相同的索引,因为它将正确对齐如果这样做,它是否工作:df.loc[null_index,'TOC_mg/L']=df['DOC_mg/L']
是的,它工作得很好。谢谢你想让我发帖回答吗?是的,如果你不介意的话!