将 numpy 数组转换为 CSV 字符串,将 CSV 字符串转换回 numpy 数组

     2023-02-23     269

关键词:

【中文标题】将 numpy 数组转换为 CSV 字符串,将 CSV 字符串转换回 numpy 数组【英文标题】:Convert a numpy array to a CSV string and a CSV string back to a numpy array 【发布时间】:2013-05-05 04:12:52 【问题描述】:

我必须将一个 numpy 浮点数组转换为一个字符串(以存储在 SQL DB 中),然后还将相同的字符串转换回一个 numpy 浮点数组。

这就是我要去字符串的方式 (based on this article)

VIstring = ''.join(['%.5f,' % num for num in VI])
VIstring= VIstring[:-1] #Get rid of the last comma

所以首先这确实有效,这是一个好方法吗?他们是摆脱最后一个逗号的更好方法吗?或者我可以使用join 方法为我插入逗号吗?

其次,更重要的是,有没有一种巧妙的方法可以从字符串返回到浮点数组?

这里是数组和字符串的例子:

VI
array([ 17.95024446,  17.51670904,  17.08894626,  16.66695611,
        16.25073861,  15.84029374,  15.4356215 ,  15.0367219 ,
        14.64359494,  14.25624062,  13.87465893,  13.49884988,
        13.12881346,  12.76454968,  12.40605854,  12.00293814,
        11.96379322,  11.96272486,  11.96142533,  11.96010489,
        11.95881595,  12.26924591,  12.67548634,  13.08158864,
        13.4877041 ,  13.87701221,  14.40238245,  14.94943786,
        15.49364166,  16.03681428,  16.5498035 ,  16.78362298,
        16.90331119,  17.02299387,  17.12193689,  17.09448654,
        17.00066063,  16.9300633 ,  16.97229868,  17.2169709 ,  17.75368411])

VIstring
'17.95024,17.51671,17.08895,16.66696,16.25074,15.84029,15.43562,15.03672,14.64359,14.25624,13.87466,13.49885,13.12881,12.76455,12.40606,12.00294,11.96379,11.96272,11.96143,11.96010,11.95882,12.26925,12.67549,13.08159,13.48770,13.87701,14.40238,14.94944,15.49364,16.03681,16.54980,16.78362,16.90331,17.02299,17.12194,17.09449,17.00066,16.93006,16.97230,17.21697,17.75368'

哦,是的,%.5f 的精度损失完全没问题,这些值由原始点插值,只有小数点后 4 位精度,所以我不需要打败它。所以在恢复 numpy 数组时,我很高兴只得到 5 位小数精度(显然我想)

【问题讨论】:

您可以查看 numpy savetxt 和 loadtxt 函数 @MattAnderson 有没有办法使用这些方法将文本直接放入字符串中,然后直接从内存中的字符串中加载而不是使用文件? 【参考方案1】:
>>> import numpy  as np
>>> from cStringIO import StringIO
>>> VI = np.array([ 17.95024446,  17.51670904,  17.08894626,  16.66695611,
        16.25073861,  15.84029374,  15.4356215 ,  15.0367219 ,
        14.64359494,  14.25624062,  13.87465893,  13.49884988,
        13.12881346,  12.76454968,  12.40605854,  12.00293814,
        11.96379322,  11.96272486,  11.96142533,  11.96010489,
        11.95881595,  12.26924591,  12.67548634,  13.08158864,
        13.4877041 ,  13.87701221,  14.40238245,  14.94943786,
        15.49364166,  16.03681428,  16.5498035 ,  16.78362298,
        16.90331119,  17.02299387,  17.12193689,  17.09448654,
        17.00066063,  16.9300633 ,  16.97229868,  17.2169709 ,  17.75368411])
>>> s = StringIO()
>>> np.savetxt(s, VI, fmt='%.5f', newline=",")
>>> s.getvalue()
'17.95024,17.51671,17.08895,16.66696,16.25074,15.84029,15.43562,15.03672,14.64359,14.25624,13.87466,13.49885,13.12881,12.76455,12.40606,12.00294,11.96379,11.96272,11.96143,11.96010,11.95882,12.26925,12.67549,13.08159,13.48770,13.87701,14.40238,14.94944,15.49364,16.03681,16.54980,16.78362,16.90331,17.02299,17.12194,17.09449,17.00066,16.93006,16.97230,17.21697,17.75368,'
>>> np.fromstring(s.getvalue(), sep=',')
array([ 17.95024,  17.51671,  17.08895,  16.66696,  16.25074,  15.84029,
        15.43562,  15.03672,  14.64359,  14.25624,  13.87466,  13.49885,
        13.12881,  12.76455,  12.40606,  12.00294,  11.96379,  11.96272,
        11.96143,  11.9601 ,  11.95882,  12.26925,  12.67549,  13.08159,
        13.4877 ,  13.87701,  14.40238,  14.94944,  15.49364,  16.03681,
        16.5498 ,  16.78362,  16.90331,  17.02299,  17.12194,  17.09449,
        17.00066,  16.93006,  16.9723 ,  17.21697,  17.75368])

【讨论】:

啊,将字符串设置为文件缓冲区...要走的路。知道那里应该有一些聪明的方法 这与我发布的链接中的方法 5 非常相似,我想我应该已经注意到了。谢谢。我可能会坚持 Boud 的方法 @Dan 不是真的,因为我的代码中的所有操作都是在 C 级别执行的,所以它可能会更快,而且它还避免了使用 numpy 函数重新发明***。跨度> 【参考方案2】:

如果你想要一些字符串表示(不一定是 CSV),你可以试试这个,我一直在使用:

import numpy, json

## arr is some numpy.ndarray
s = json.dumps(arr.tolist())
arrback = numpy.array(json.loads(s))

它适用于大多数常见的数据类型。

【讨论】:

+1 这很酷,特别是如果您需要保持精度。【参考方案3】:

首先你应该这样使用join来避免最后一个逗号问题:

VIstring = ','.join(['%.5f' % num for num in VI])

然后读取它,使用numpy.fromstring:

np.fromstring(VIstring, sep=',')

【讨论】:

非常好的功能建议@Boud. 不客气@Pramit:pandas 足够强大,它会让用户忘记底层的 numpy 功能

将列表列表的字符串转换为 Numpy 数组

】将列表列表的字符串转换为Numpy数组【英文标题】:ConvertingastringoflistsoflistsintoaNumpyarray【发布时间】:2019-03-2418:51:50【问题描述】:我对Pandas和Numpy还是很陌生。我正在尝试将包含列表列表的字符串转换为形状数组(150、150、3... 查看详情

numpy 将分类字符串数组转换为整数数组

】numpy将分类字符串数组转换为整数数组【英文标题】:numpyconvertcategoricalstringarraystoanintegerarray【发布时间】:2011-03-1111:50:04【问题描述】:我正在尝试将分类变量的字符串数组转换为分类变量的整数数组。例如importnumpyasnpa=np.ar... 查看详情

为啥将 numpy 数组转换为 csv 文件不显示属性名称,而是将第一行值作为属性名称?

】为啥将numpy数组转换为csv文件不显示属性名称,而是将第一行值作为属性名称?【英文标题】:whyconvertingnumpyarrayintocsvfileshownoattributesnamebutratherputthefirstrowvaluesastheattributenames?为什么将numpy数组转换为csv文件不显示属性名称,而... 查看详情

如何将csv文件转换为numpy数组格式?(代码片段)

...s[0][2]之类的元素。我想知道如何将csv文件转换为一个numpy数组?答案如果您坚持将数据帧转换为numpy数组,则可以使用iris.to_numpy()来获得所需的内容,因为熊猫是建立在numpy之上的,并且它们紧密集成。但是,正如我在评论中... 查看详情

将 CSV 文件读取到 numpy 数组,第一行为字符串,其余为浮点数

】将CSV文件读取到numpy数组,第一行为字符串,其余为浮点数【英文标题】:ReadCSVfiletonumpyarray,firstrowasstrings,restasfloat【发布时间】:2012-09-0209:46:41【问题描述】:我将数据存储在CSV中,其中第一行是字符串(列名),其余行是... 查看详情

将 ctypes 类型数组转换为 void 指针时出现 Numpy 错误

...ointer【发布时间】:2020-01-2218:53:09【问题描述】:我想将字符串列表发送到C函数:fromctypesimportc_double,c_void_p,Structure,cast,c_char_p,c_size_t,POINTERimport 查看详情

如何将 .csv 文件中的数据转换为 NumPy 数组并使用统计数据来查找数据的平均值? [复制]

】如何将.csv文件中的数据转换为NumPy数组并使用统计数据来查找数据的平均值?[复制]【英文标题】:HowdoIconvertdatafrom.csvfileintoaNumPyarrayandusestatisticstofindthemeanofthedata?[duplicate]【发布时间】:2019-09-1106:08:47【问题描述】:我想将.cs... 查看详情

将字符串转换为numpy数组

】将字符串转换为numpy数组【英文标题】:Convertstringtonumpyarray【发布时间】:2015-03-2806:24:57【问题描述】:输入:mystr="100110"所需的输出numpy数组:mynumpy==np.array([1,0,0,1,1,0])我试过了:np.fromstring(mystr,dtype=int,sep=\'\')但问题是我无法... 查看详情

将浮点 numpy 数组转换为字符串数组 Python

】将浮点numpy数组转换为字符串数组Python【英文标题】:ConvertingfloatnumpyarraystostringarraysPython【发布时间】:2021-12-2805:50:35【问题描述】:如何将所有浮点numpy数组转换为字符串数组?importnumpyasnpfloats=np.array([1,3.4,0.678,11.1])预期输... 查看详情

将熊猫系列转换为numpy数组[重复]

】将熊猫系列转换为numpy数组[重复]【英文标题】:Convertpandasseriesintonumpyarray[duplicate]【发布时间】:2017-10-2913:04:27【问题描述】:我是pandas和python的新手。我的输入数据是这样的categorytext1helloiamfine.howareyou1iamgood.howareyoudoing.inputDa... 查看详情

将 C/C++ 向量快速转换为 Numpy 数组

】将C/C++向量快速转换为Numpy数组【英文标题】:FastconversionofC/C++vectortoNumpyarray【发布时间】:2011-03-2419:13:38【问题描述】:我正在使用SWIG将一些C++代码粘合到Python(2.6)中,其中一部分粘合包括一段代码,用于将C++端的大数据字... 查看详情

C# 如何将 CSV 转换为数组?

...布时间】:2017-10-0208:11:01【问题描述】:我有一个玩家ID字符串的CSV列表,每个字符串位于不同的行。如何在C#中将每个ID存储在数组中?【问题讨论】:努力寻找你的问题你做了什么?StackOverflow不是免费的代码编写服务。您应... 查看详情

将数据从csv转换为numpy数组时出错(代码片段)

我正在从CSV文件创建一个Numpy数组,它确实有效,但在for循环结束时它给出了上述错误。我有一个5列的数据集,并一直在尝试创建一个Numpy数组。但是,一旦我将代码更改为:代码确实只与文件列一起使用:values=[float(x)forxinline.s... 查看详情

Numpy:将标签转换为索引

...间】:2018-10-1206:28:09【问题描述】:是否可以使用numpy将字符串向量转换为索引向量?假设我有一个字符串数组,如[\'ABC\',\'DEF\',\'GHI\',\'DEF\',\'ABC\']等。我希望将其更改为整数数组,如[0,1,2,1,0]。可以使用numpy吗?我知道Pandas有一... 查看详情

将numpy数组转换为字符串的最有效方法

】将numpy数组转换为字符串的最有效方法【英文标题】:Mostefficientwaytoconvertnumpyarraytostring【发布时间】:2015-02-1018:26:13【问题描述】:我正在运行一些运行速度太慢的模拟,因此我分析了我的代码,发现超过90%的时间都花在了将... 查看详情

如何将 numpy 对象数组转换为 str/unicode 数组?

...有方法现在都可以例外。原问题:有时使用objectdtype存储字符串数组很方便,尤其是当需要在不知道字符串最大长度的情况下修 查看详情

将 1 和 0 的 numpy 数组转换为十进制(Python)

...切都好。我现在正在做一个小任务。我有一个二进制数的字符串,我需要将其转换为十进制。我将字符串转换为numpy数组,然后尝试在此链接的答案中看到的内容:Convertbinary(0|1)nu 查看详情

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

】如何将包装为字符串的向量转换为熊猫数据框中的numpy数组?【英文标题】:Howtoconvertvectorwrappedasstringtonumpyarrayinpandasdataframe?【发布时间】:2018-01-2402:11:43【问题描述】:我有一个带有一列向量的pandas数据框,我想对其执行矩... 查看详情