numpy 2D 数组作为熊猫元素



如何正确使用 numpy 2d 数组作为熊猫行列元素?

我尝试了一些简单的例子,但是当我保存和加载数据库时,数组的格式会发生变化,我无法访问数组的索引(但我通常可以访问该元素(。

举个例子:

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所说,我不需要人类可读的格式,所以我使用了泡菜格式。这种方式是直接保存,加载和使用与python变量相同。

另一种选择是使用另一个分隔符(mdk的解决方案(。但据我了解,您必须将数组转换为字符串,然后从字符串转换回来,如果数组有多个维度(使用reshape(,则必须重塑数组。

原始数据帧如下所示:

array     A      B
0  [[0.0, 0.0], [0.0, 0.0]]  some  other

数组包含 3 次",",并且您正在使用带有标准分隔符 ","df.to_csv('experiment.csv',index=False)(请参阅文档(。

尝试使用其他分隔符,例如df.to_csv('experiment.csv', sep=';',index=False)df = pd.read_csv('experiment.csv', sep=';').

您的数据帧现在如下所示:

array     A      B
0  [[0. 0.]rn [0. 0.]]  some  other

导入后,数组不再是数组,而是字符串。 使用 numpy.fromstring 将数组字符串转换回 numpy 数组。

最新更新