這個例外來自於您希望在存儲int
s的列(array
)中插入list
或array
這一事實。並且Pandas和NumPy中的array
不能有「粗糙的形狀」,因此不能在一行中包含2個元素,而在其他所有其他元素中(除了可能使用掩碼)。
爲了使它工作,你需要存儲「一般」對象。例如:
import pandas as pd
df = pd.DataFrame({'col1' : [25, 12, 14, 21]})
df.col1[0] = [1, 2]
# ValueError: setting an array element with a sequence.
但這個工程:
>>> df.col1 = df.col1.astype(object)
>>> df.col1[0] = [1, 2]
>>> df
col1
0 [1, 2]
1 12
2 14
3 21
注:我不建議這樣做,由於object
列是不是專門類型的列慢得多。但是因爲你用for
循環遍歷Column,所以你不需要性能,所以你也可以使用object
數組。
如果你想讓它快是矢量化convert2vector
功能和結果分配給兩列,你應該做的事情:
import pandas as pd
import numpy as np
def convert2Vector(angle):
"""I don't know what your function does so this is just something that
calculates the sin and cos of the input..."""
ret = np.zeros((angle.size, 2), dtype=float)
ret[:, 0] = np.sin(angle)
ret[:, 1] = np.cos(angle)
return ret
>>> df = pd.DataFrame({'col1' : [25, 12, 14, 21]})
>>> df['col2'] = [0]*len(df)
>>> df[['col1', 'col2']] = convert2Vector(df.col1)
>>> df
col1 col2
0 -0.132352 0.991203
1 -0.536573 0.843854
2 0.990607 0.136737
3 0.836656 -0.547729
謝謝!然後爲了使用矢量的元素作爲實數,我需要再次轉換它們嗎? –
@ BenJo你的意思是在第二種情況下還是第一種情況?在第二種情況下很容易:只需在需要第一項的'col1'和需要第二項的'col2'處使用。如果你在談論第一種情況,你可以使用'np.array(df。col1)'將其轉換爲'rows x 2'數組:) – MSeifert
2列解決方案的問題在於,我必須將數據集導入數據庫中,並使用定義的列數,以便第一個解決方案更好。特別是如果我仍然可以作爲實數訪問向量的元素 –