[英]numpy 2D arrays as pandas elements
我如何正確地將numpy二維數組用作熊貓行列元素?
我嘗試了一些簡單的示例,但是當我保存和加載數據庫時,數組的格式發生了變化,並且我無法訪問數組的索引(但是我通常可以訪問元素)。
一個例子:
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['array','A','B'])
v = np.zeros((2,2))
df.loc[0,'array'] = v
df.loc[0,'A'] = 'some'
df.loc[0,'B'] = 'other'
df.to_csv('experiment.csv',index=False)
我嘗試讀取元素0
numpy數組的操作:
import pandas as pd
import numpy as np
df = pd.read_csv('experiment.csv')
new_v1 = df.loc[0,'array']
print(new_v1[0,1])
new_v2 = np.array(df.loc[0,'array'])
print(new_v2[0,1])
new_v3 = df.loc[0,'array'].item()
print(new_v3[0,1])
但是它顯示以下錯誤:
IndexError: too many indices for array
AttributeError: 'str' object has no attribute 'item'
如何為每個元素使用numpy數組? 可能嗎?
解決方案
正如ALollz所說,我不需要采用人類可讀的格式,因此我使用了pickle格式。 這種方式是直接保存,加載和使用與python變量相同的方式。
另一個選擇是使用另一個分隔符( mdk的解決方案)。 但是據我了解,您必須將數組轉換為字符串,然后再從字符串轉換回來,如果數組的尺寸不只一維,則需要重塑數組(使用reshape
)。
您原始的DataFrame如下所示:
array A B
0 [[0.0, 0.0], [0.0, 0.0]] some other
該數組包含3次“,”,並且您在將df.to_csv('experiment.csv',index=False)
與標准分隔符“,”一起使用(請參閱docs )。
嘗試使用其他分隔符,例如df.to_csv('experiment.csv', sep=';',index=False)
和df = pd.read_csv('experiment.csv', sep=';')
。
您的DataFrame現在看起來像這樣:
array A B
0 [[0. 0.]\r\n [0. 0.]] some other
導入后,數組不再是數組,而是字符串。 使用numpy.fromstring將數組字符串轉換回numpy數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.