DataFrameの列の値を、同じオリジナルのDataFrame内の別の列のサブセットに割り当てたいとします。次の例を考えてみましょう:インデックスが1
あるすべての値についてPandas DataFrame:列の値をコピーせずに元のデータフレームのサブセットに割り当てます。
df = pd.DataFrame(np.random.randn(8, 4), index=[0,1,1,2,1,3,4,5], columns=['A', 'B', 'C', 'D'])
df['str'] = ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
df.loc[1, 'B'] = df.loc[1, 'A']
、私は列'B'
に列'A'
の値を割り当てます。この操作は元のDataFrameに適用され、コピーは適用されません。
上記の例は、次のエラー
ValueError Traceback (most recent call last)
<ipython-input-144-29c8017817b2> in <module>()
2 df['str'] = ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
3 display(df)
----> 4 df.loc[1, 'B'] = df.loc[1, 'A']
5 display(df)
~/anaconda/envs/snakes36/lib/python3.6/site-packages/pandas/core/indexing.py in __setitem__(self, key, value)
177 key = com._apply_if_callable(key, self.obj)
178 indexer = self._get_setitem_indexer(key)
--> 179 self._setitem_with_indexer(indexer, value)
180
181 def _has_valid_type(self, k, axis):
~/anaconda/envs/snakes36/lib/python3.6/site-packages/pandas/core/indexing.py in _setitem_with_indexer(self, indexer, value)
577
578 if len(labels) != len(value):
--> 579 raise ValueError('Must have equal len keys and value '
580 'when setting with an iterable')
581
ValueError: Must have equal len keys and value when setting with an iterable
で失敗する問題が他のfloat64
列とは異なるタイプのものであるカラムstr
と思われます。列str
を削除した場合、上のコードは完全に機能します。 .loc
操作では、A
とB
の列しか選択できないと私は理解していません。
問題は次のとおりです。My DataFrameは、タイプが異なる〜50個の列で構成されています。
これを解決するにはより良い方法がありますか?
は、私の答えは役に立ちましたか? – Dark