将pandas数据帧保存到csv时如何保留numpy数组

zes*_*sla 8 python csv numpy pandas

我有一个pandas.DataFrame作为图像的列。该列的每一行都是作为 2d 的图像numpy.array。我将它保存DataFrame到一个csv文件中pandas.DataFrame.to_csv()。但是,当我打开csv文件时,该列变为字符串而不是numpy.array.

如何读取csv文件并保留numpy.array

Ste*_*uch 11

要从numpy.arraycsv 文件中读取,您可以提供一个转换函数到pandas.read_csv.

代码:

import ast
import numpy as np
def from_np_array(array_string):
    array_string = ','.join(array_string.replace('[ ', '[').split())
    return np.array(ast.literal_eval(array_string))
Run Code Online (Sandbox Code Playgroud)

测试代码:

import numpy as np
import pandas as pd

image = np.array([[0.1, 0.2], [0.3, 0.4]])
df = pd.DataFrame(
    [['image name1', image],
     ['image name2', image],
     ],
    columns=['names', 'images']).set_index('names')
print(df)
df.to_csv('sample.csv')

df2 = pd.read_csv('sample.csv', converters={'images': from_np_array})
print(df2)
Run Code Online (Sandbox Code Playgroud)

结果:

                               images
names                                
image name1  [[0.1, 0.2], [0.3, 0.4]]
image name2  [[0.1, 0.2], [0.3, 0.4]]

         names                    images
0  image name1  [[0.1, 0.2], [0.3, 0.4]]
1  image name2  [[0.1, 0.2], [0.3, 0.4]]
Run Code Online (Sandbox Code Playgroud)