我在 Pandas
DataFrame
中有两列,它的索引是 datetime
。两列包含测量相同参数的数据,但两列都不完整(有些行根本没有数据,有些行在两列中都有数据,而其他数据在列“a”或“b”中)。
我编写了以下代码来查找列中的间隙,生成这些间隙出现的日期索引列表,并使用此列表查找和替换丢失的数据。但是我在第 3 行收到 KeyError: Not in index
,我不明白这是因为我用来索引的键来自 DataFrame
本身。有人可以解释为什么会发生这种情况以及我可以做些什么来解决它吗?这是代码:
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['TOC_mg/L'][null_index] = df[null_index]['DOC_mg/L']
会产生索引错误,我在玩具数据集上得到错误:IndexError: indices are out-of-bounds
如果您将顺序更改为此,它可能会起作用:
df['TOC_mg/L'][null_index] = df['DOC_mg/L'][null_index]
但是,这是链式赋值,应该避免,参见 online docs
所以你应该使用loc
:
df.loc[null_index,'TOC_mg/L']=df['DOC_mg/L']
df.loc[notnull_index, 'DOC_mg/L'] = df['TOC_mg/L']
请注意,不必为 rhs 使用相同的索引,因为它会正确对齐
关于python-2.7 - KeyError:不在索引中,使用从 Pandas 数据帧本身生成的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24160227/