python-2.7 - KeyError:不在索引中,使用从 Pandas 数据帧本身生成的键

标签 python-2.7 pandas keyerror

我在 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/

相关文章:

python - 如何在 pd.dataframe 的特定组中找到相交和唯一的字符串?

python - Pandas 数据帧KeyError : 'the label [2019-01-14] is not in the [index]'

python - 从另一个 DataFrame 添加多个列时出现 Pandas KeyError

python - 如何将新列添加到按 groupby 分组的分层数据框中

python - 从 SPSS 到 Python 日期的整数日期

Python 在传递 key 时给出 KeyError

python - 如何在 Python 2 中重用另一个类的方法而无需继承?

python - 使用 Python urllib2 下载时忽略丢失的文件

python-2.7 - 从 SciPY 导入某些模块时出现 ImportError

python - 如何获取直接子节点而不是具有相同标签名称的子节点xml minidom python