UDs
@UDs

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

for文の反復可能オブジェクトの要素を変数名にしたい

pandasの要素をリストで条件抽出したやつの変数名をリストのやつにする方法ありませんか?

test.py
name_list = ['Horse', 'Bird', 'Sheep'

for i in name_list:
    data = dfdf["name"] == i

説明。
dfに入っている"name"列の要素が、リストにある名前と同じであるなら抽出すると言うコードを書いた。
抽出したものを一旦dataという変数に代入したのだが、この変数名を抽出したリストの要素と同じにしたい。

つまり、

Horse = df[df["name"] == Horse]
Bird = df[df["name"] == Bird]
Sheep = df[df["name"] == Sheep]

というようなものをfor文でできないだろうか?
for文にこだわらずとも出来ないでしょうか?

0

2Answer

name_list = ['Horse', 'Bird', 'Sheep'

for i in name_list:
    locals()[i] = dfdf["name"] == i

これでローカル変数として定義できます。

0Like

Comments

  1. @UDs

    Questioner

    ありがとうございます。

    試してみます。

    あと、追加で聞きたいのですが、リストのnanの部分欠損値がname_listに入っていた場合の消し方を教えていただかませんか?
  2. import math
    name_list = ['Horse', 'Bird', 'Sheep']
    new_name_list = [x for x in name_list if math.isnan(x) == False]

    こんな感じでいけると思います。

グローバル空間での locals() は global() になるため、グローバル変数の変更は可能です。
関数やメソッドの中での locals() ではローカル変数の変更はできないです。

>>> def sample():
...     a = 1
...     locals()['a'] = 2
...     print(a, locals()['a'])
...
>>> sample()
1 1

参考: https://docs.python.org/ja/3/library/functions.html#locals

注釈: この辞書の内容は変更してはいけません; 変更しても、インタプリタが使うローカル変数や自由変数の値には影響しません。

辞書データにしてはいかがでしょうか?

name_list = ['Horse', 'Bird', 'Sheep']

data = {}
for name in name_list:
    data[name] = df[df['name'] == name]
0Like

Your answer might help someone💌