将熊猫数据框保存到csv时如何保留numpy数组

Posted

技术标签:

【中文标题】将熊猫数据框保存到csv时如何保留numpy数组【英文标题】:how to keep numpy array when saving pandas dataframe to csv 【发布时间】:2017-08-02 23:19:59 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

要从 csv 文件中读取 numpy.array,您可以向 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))

测试代码:

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)

结果:

                               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]]

【讨论】:

非常感谢!替换('[','[')的目的是什么? @斯蒂芬劳赫 一个普遍的问题是:一般来说,我应该将图像作为扁平的一维数组存储在数据帧中吗? @斯蒂芬劳赫 这个replace去掉了一些空格,因为后来我用','和逗号替换空格会有问题。 我没有详细研究过 csv 解析器,因此无法权威地回答最佳格式,但我可以说非扁平数组中的换行有点奇怪。跨度> 如果您需要在 python 变量内的数据帧df2images 字段中获取数组,请使用:my_images = np.array(df2['images'].values.tolist())

以上是关于将熊猫数据框保存到csv时如何保留numpy数组的主要内容,如果未能解决你的问题,请参考以下文章

将 pandas 数据框保存到 csv 时,如何保留 columns.name?

将 pandas 数据框保存到 csv 时,如何保留 columns.name?

从熊猫数据框创建numpy数组[重复]

如何将csv文件转换为numpy数组格式?

如何将包装为字符串的向量转换为熊猫数据框中的numpy数组?

将数据框保存到多个 CSV,保留数据框名称