わかったつもりでも、いざ自分でコードを書き始めるとつまずきがちなのが「追加」の方法です。
私も「追加」のコードが間違っていたがために何度もエラーを起こしました。
しかも、そこが間違っていることになかなか気づけず・・・。
ということで、ここではPythonの各オブジェクトに要素を追加する方法の違いをまとめます。
リストの場合
リストだと、appendメソッドを使って要素を追加します。要素はリストの一番後ろに追加されます。
sushi = ['いくら', 'えんがわ', 'つぶ貝']
sushi.append('うに')
[‘いくら’, ‘えんがわ’, ‘つぶ貝’, ‘うに’]
位置を指定して追加したい場合は、appendではなくinsertメソッドを使います。
挿入する位置、要素の順で指定します。
sushi = ['いくら','えんがわ','つぶ貝']
list.insert(0,'うに')
[‘うに’, ‘いくら’, ‘えんがわ’, ‘つぶ貝’]
リストへの追加のポイント
ポイントは2つです。これ重要です。
・sushi = sushi.append(〇〇) や sushi = sushi.insert(△、〇〇) のように上書きしなくていい。
・sushi[3] = ‘うに’ という方法では追加できない。
辞書の場合
辞書の場合はこのように書きます。updateメソッドを使います。
sushi = {'いくら': 1,'えんがわ': 3,'つぶ貝': 2}
sushi.update({'うに': 0})
sushi
{‘いくら’: 1, ‘えんがわ’ 3, ‘つぶ貝’: 2, ‘うに’: 0}
辞書の場合は、このような書き方もできます。
sushi = {'いくら': 1,'えんがわ': 3,'つぶ貝': 2}
sushi['うに'] = 0
sushi
{‘いくら’: 1, ‘えんがわ’ 3, ‘つぶ貝’: 2, ‘うに’: 0}
なお、辞書には順番という概念がありませんので、位置を指定した挿入方法はありません。
辞書への追加のポイント
ポイントをまとめます。
・sushi = sushi.update(〇〇) のように上書きしなくていい。
・sushi[‘うに’] = 0 という方法で追加できる。
タプルの場合
タプルの場合は、このように追加できます。
sushi = ('いくら','えんがわ','つぶ貝')
sushi = sushi + ('うに',)
sushi
( ‘いくら’, ‘えんがわ’, ‘つぶ貝’, ‘うに’ )
sushiに新しい要素を足して、上書きする方法です。
タプルの要素が1個だけの場合は、(‘うに’) ではなくカンマを入れて(‘うに’, ) とします。カンマがないとエラーとなります。
追加できる箇所は、一番前か一番後ろだけのようです。
タプルへの追加のポイント
・sushi = sushi + (‘〇〇’, ) のようにして上書きしなければならない。
pd.Seriesの場合
pandasのSeriesの場合、このようにして要素を追加できます。
sushi = pd.Series({'いくら': 1,'えんがわ': 3,'つぶ貝': 2})
sushi['うに'] = 0
sushi
いくら 1
えんがわ 3
つぶ貝 2
うに 0
dtype: int64
辞書と同じやり方ですね。
余談ですが、辞書からSeriesを作ると順番がバラバラになります(今回は発生していませんが)。順番を固定してSeriesを作る場合は次のようにします。
sushi = pd.Series([1, 3, 2], index = ['いくら', 'えんがわ','つぶ貝'])
pd.Seriesへの追加のポイント
ポイントをまとめます。
・sushi[‘うに’] = 0 という方法で追加できる。
np.arrayの場合
numpyのarrayの場合は、np.insertメソッドを使います。
sushi = np.array(['いくら', 'えんがわ','つぶ貝'])
sushi = np.insert(sushi, 0, ['うに'])
sushi
array( [‘うに’, ‘いくら’, ‘えんがわ’,’つぶ貝’] )
挿入する位置、要素の順で指定します。それをsushiに上書きする形にします。
np.arrayへの追加のポイント
ポイントをまとめます。
・sushi = np.insert(sushi, △, [‘〇〇’]) のようにして上書きしなければならない。
・sushi[3] = ‘うに’ という方法では追加できない。
まとめ
以上が、各オブジェクトに要素を追加する方法です。ここはコードを書いているときによく間違えるところですので、エラーが起きたときは疑うようにしてみてください。