3

インデックスとしてPandas DataFrame持つに 2 つの列があります。datetime2 つの列には同じパラメータを測定したデータが含まれていますが、どちらの列も完全ではありません (データがまったくない行もあれば、両方の列にデータがあり、列 '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 に答える