質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2889閲覧

dataframe名を動的にdf1,df2,df3,...と作りたい

okabenzene

総合スコア4

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/02 02:07

前提・実現したいこと

pythonでcsvファイルのカットをするため、dataframeを条件で分割したい。
そのためdataframeを動的にdf1,df2,df3,...と作りたい。
分割条件は2つの行(Cycle,Step)の数字を使う。

発生している問題・エラーメッセージ

python

1--------------------------------------------------------------------------- 2KeyError Traceback (most recent call last) 3~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance) 4 2645 try: 5-> 2646 return self._engine.get_loc(key) 6 2647 except KeyError: 7 8pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() 9 10pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() 11 12pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item() 13 14pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item() 15 16KeyError: 0 17 18During handling of the above exception, another exception occurred: 19 20KeyError Traceback (most recent call last) 21~\anaconda3\lib\site-packages\pandas\core\internals\managers.py in set(self, item, value) 22 1070 try: 23-> 1071 loc = self.items.get_loc(item) 24 1072 except KeyError: 25 26~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance) 27 2647 except KeyError: 28-> 2648 return self._engine.get_loc(self._maybe_cast_indexer(key)) 29 2649 indexer = self.get_indexer([key], method=method, tolerance=tolerance) 30 31pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() 32 33pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() 34 35pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item() 36 37pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item() 38 39KeyError: 0 40 41During handling of the above exception, another exception occurred: 42 43ValueError Traceback (most recent call last) 44<ipython-input-7-f3ba3baa1b51> in <module> 45 1 for i in range(4): 46----> 2 df[i] = df[(df['Cycle'] == '1') & (df['Step'] == 'i')] 47 48~\anaconda3\lib\site-packages\pandas\core\frame.py in __setitem__(self, key, value) 49 2936 else: 50 2937 # set column 51-> 2938 self._set_item(key, value) 52 2939 53 2940 def _setitem_slice(self, key, value): 54 55~\anaconda3\lib\site-packages\pandas\core\frame.py in _set_item(self, key, value) 56 2999 self._ensure_valid_index(value) 57 3000 value = self._sanitize_column(key, value) 58-> 3001 NDFrame._set_item(self, key, value) 59 3002 60 3003 # check if we are modifying a copy 61 62~\anaconda3\lib\site-packages\pandas\core\generic.py in _set_item(self, key, value) 63 3622 64 3623 def _set_item(self, key, value) -> None: 65-> 3624 self._data.set(key, value) 66 3625 self._clear_item_cache() 67 3626 68 69~\anaconda3\lib\site-packages\pandas\core\internals\managers.py in set(self, item, value) 70 1072 except KeyError: 71 1073 # This item wasn't present, just insert at end 72-> 1074 self.insert(len(self.items), item, value) 73 1075 return 74 1076 75 76~\anaconda3\lib\site-packages\pandas\core\internals\managers.py in insert(self, loc, item, value, allow_duplicates) 77 1179 new_axis = self.items.insert(loc, item) 78 1180 79-> 1181 block = make_block(values=value, ndim=self.ndim, placement=slice(loc, loc + 1)) 80 1182 81 1183 for blkno, count in _fast_count_smallints(self._blknos[loc:]): 82 83~\anaconda3\lib\site-packages\pandas\core\internals\blocks.py in make_block(values, placement, klass, ndim, dtype) 84 3039 values = DatetimeArray._simple_new(values, dtype=dtype) 85 3040 86-> 3041 return klass(values, ndim=ndim, placement=placement) 87 3042 88 3043 89 90~\anaconda3\lib\site-packages\pandas\core\internals\blocks.py in __init__(self, values, placement, ndim) 91 2587 values = np.array(values, dtype=object) 92 2588 93-> 2589 super().__init__(values, ndim=ndim, placement=placement) 94 2590 95 2591 @property 96 97~\anaconda3\lib\site-packages\pandas\core\internals\blocks.py in __init__(self, values, placement, ndim) 98 123 if self._validate_ndim and self.ndim and len(self.mgr_locs) != len(self.values): 99 124 raise ValueError( 100--> 125 f"Wrong number of items passed {len(self.values)}, " 101 126 f"placement implies {len(self.mgr_locs)}" 102 127 ) 103 104ValueError: Wrong number of items passed 8, placement implies 1 105 106

該当のソースコード

python

1for i in range(4): 2 df[i] = df[(df['Cycle'] == '1') & (df['Step'] == 'i')]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

辞書やリストを作ってそこに入れたほうが良いという点では、jeanbiegoのおっしゃるとおりです。

ただ、df['Cycle']やdf['Step']は整数型の可能性が高いので、今のままでは動かないような気がします。

辞書にするなら

python

1df_dict = {i: df[(df['Cycle'] == 1) & (df['Step'] == i)] for i in range(4)}

リストにするなら

python

1df_list = [df[(df['Cycle'] == 1) & (df['Step'] == i)] for i in range(4)]

です。

お勧めはしませんが、どうしても別々の変数に入れたければ

python

1for i in range(4): 2 globals()[f'df{i}'] = df[(df['Cycle'] == 1) & (df['Step'] == i)]

です。

投稿2021/04/02 08:44

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

python3

1for i in range(4): 2 df[i] = df[(df['Cycle'] == '1') & (df['Step'] == 'i')]

これは、dfの中のインデックスiの要素に別のデータフレームを代入しようとしています。

変数を動的に作るのはexecとか使えばできますが、とてもわかりづらくなるのでオススメしません。
なので、たとえば下記のように辞書やリストを作ってそこに入れていくなどするのが良いですね。

python3

1df_dct = dict() 2for i in range(4): 3 df_dct[i] = df[(df['Cycle'] == '1') & (df['Step'] == 'i')]

投稿2021/04/02 02:48

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

okabenzene

2021/04/02 08:58

なるほど。ありがとうございます。 書き換えて実行した結果エラーは出なかったですが、データが格納されていないようです。 df['Step'] == 'i' このiが変数として認識されていないようなのです。 何か良い方法をご存じないでしょうか。
jeanbiego

2021/04/02 09:10

str(i)でいかがでしょう。
jeanbiego

2021/04/02 09:16

なお、もしデータフレームの要素の型が文字列じゃなくて数値ならば、ppaulさんの回答通りかと思いますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問