pandas
文書によると、setting with enlargmentを使用して、追加し、存在しない行DataFrame
することは可能であってもよいが、必要がありますKeyError
:設定パンダ複数の行
import pandas as pd
print(pd.__version__) # '0.19.2'
df = pd.DataFrame([[9] * 3] * 3, index=list('ABC'))
## Show a mix of extant and missing keys:
inds_e = pd.Index(list('BCDE'))
print(df.loc[inds_e])
# 0 1 2
# B 9.0 9.0 9.0
# C 9.0 9.0 9.0
# D NaN NaN NaN
# E NaN NaN NaN
## Assign the enlarging subset to -1:
try:
df.loc[inds_e] = -1
except KeyError as e:
print(e)
# "Index(['D', 'E'], dtype='object') not in index"
複数存在しないキーを設定するには、うまく動作し、enlargmentでいずれかの行を設定するだけでなく正常に動作します:
## Assign all the non-missing keys at once:
inds_nm = inds_e.intersection(df.index)
df.loc[inds_nm] = -1
## Assign the missing keys one at a time:
inds_m = inds_e.difference(df.index)
for ind in inds_m:
df.loc[ind] = -1
print(df)
# 0 1 2
# A 9 9 9
# B -1 -1 -1
# C -1 -1 -1
# D -1 -1 -1
# E -1 -1 -1
これは、ひどく不気味で非効率的だと言われています。 very similar question hereがありますが、これはcombine_first()
機能を使用して解決されました。combine_first()
とupdate()
のメソッドは単純な割り当てと同じセマンティクスを持たないようです - combine_first
の場合はnull以外の値は更新されず、 update
の場合、右側のデータフレームのnull値は、左側のnullでない値を上書きしません。
これはpandas
のバグですか、そうでない場合は、pandas
データフレーム上の既存キーと不足キーの組み合わせに値を割り当てる適切な方法は何ですか?
を編集します。pandas
githubでthere is an issue about this from 2014のように見えます。実際にはdf.reindex
を使用しているようですが、すべてのキーのサブセットに拡大を割り当てようとしているときに、どのように動作するかはわかりません。
はい、これは基本的に私がやったことです。両方を行う単一の行動を望んでいたが、問題のコメントを考えれば、これは正しいことだと思われる。 – Paul