3

Pandas DataFrame我在 a中有两列datetime作为其索引。两列包含测量相同参数的数据,但两列都不完整(有些行根本没有数据,有些行在列中都有数据,在列“a”或“b”中包含其他数据)。

我编写了以下代码来查找列中的空白,生成这些空白出现的日期索引列表,并使用此列表查找和替换丢失的数据。但是我KeyError: Not in index在第 3 行得到了一个,我不明白,因为我用来索引的键来自它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)
4

1 回答 1

3

每当您考虑执行分配时,您应该使用.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]

但是,这是链式分配,应该避免,请参阅在线文档

所以你应该使用loc

df.loc[null_index,'TOC_mg/L']=df['DOC_mg/L']
df.loc[notnull_index, 'DOC_mg/L'] = df['TOC_mg/L']

请注意,没有必要对 rhs 使用相同的索引,因为它会正确对齐

于 2014-06-11T12:16:39.470 回答