之前把 ndarray
存到了 csv
文件中变字符串了,读取的时候想要恢复成原来的数据结构,一般只要在读取的时候指定 converters
就行了。
# csv 文件长这样
column1
[array([3])]
[array([4])]
[array([5])]
df = pd.read_csv('data.csv', converters={'column1': eval})
但是由于 array
是 numpy
库中得到函数,直接调用 eval
函数会导致 NameError: name 'numpy' is not defined
。
eval
函数可以接受一个可选的 globals
参数,用于指定命名空间。在使用 eval
函数时,可以通过传递一个字典作为 globals
参数来指定命名空间。对于NumPy的命名空间,可以使用numpy.__dict__
来获取相应的字典。
给 eval
函数指定命名空间就行了,具体做法如下:
def my_eval(string):
namespace = np.__dict__ # 获取NumPy的命名空间
return eval(string, namespace)
df = pd.read_csv('data.csv', converters={'column1': my_eval})
这样就可以正确解析类了。其他类似的命名空间问题都可以用这个办法解决。
References: