Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 KeyError:不在索引中,使用从自身数据帧生成的键_Python 2.7_Pandas_Keyerror - Fatal编程技术网

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']
是的,它工作得很好。谢谢你想让我发帖回答吗?是的,如果你不介意的话!