将熊猫数据框保存到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 变量内的数据帧df2
的images
字段中获取数组,请使用:my_images = np.array(df2['images'].values.tolist())
。以上是关于将熊猫数据框保存到csv时如何保留numpy数组的主要内容,如果未能解决你的问题,请参考以下文章
将 pandas 数据框保存到 csv 时,如何保留 columns.name?
将 pandas 数据框保存到 csv 时,如何保留 columns.name?