我想將DataFrame中的列的值分配給同一原始DataFrame中另一列的子集。請看下面的例子: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']
對於其中的索引是1
所有值,我想'A'
列的值賦給'B'
列。此操作將應用於原始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
這個問題似乎是柱str
是不同類型比其它float64
列。如果我刪除列str
,上面的代碼完美工作。我不明白,因爲我假設我的.loc
操作只選擇列A
和B
。
問題是:我的DataFrame包含~50列不同類型。
有沒有更好的方法來解決這個問題?
難道我的回答幫助? – Dark