Numpy savetxt到csv,带整数整数字符串

时间:2014-06-08 13:21:13

标签: python csv numpy

我有三个列表,我想使用numpy中的savetxt函数保存在 csv 文件中。

list1,list2和list3都具有相同的长度和单个值。

list1,list2是整数值,list3具有字符串值

所以最后应该看起来像 column1 = list1 column2 = list2 column3 = list3

如果list3也是整数,这对我有用。它现在不起作用,因为list3是一个字符串。

如何将list3作为字符串实现并找到c_的解决方法?

savetxt('data/result.csv', c_(list1,list2,list3), delimiter=',', fmt='%d, %d, %d', 
            header='Name,Value,Value2', comments = '')

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

一个问题是:

c_(list1, list2, list3)

c_是一个古怪的对象,索引而不是调用它。当你调用它时,你会收到评论中提到的错误:

In [42]: c_(list1, list2, list3)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-42-8fcbef857684> in <module>()
----> 1 c_(list1, list2, list3)

TypeError: 'CClass' object is not callable

相反,请使用方括号,因此您要编制索引:

In [44]: c_[list1, list2, list3]
Out[44]: 
array([['10', '15', 'foo'],
       ['20', '25', 'bar'],
       ['30', '35', 'baz']], 
      dtype='|S3')

请注意,它会创建一个dtype为'|S3'的数组。也就是说,数组中的所有元素都已转换为字符串。要使用savetxt保存此内容,请使用fmt='%s, %s, %s'

In [45]: savetxt('result.csv', c_[list1, list2, list3], fmt='%s, %s, %s')

In [46]: !cat result.csv
10, 15, foo
20, 25, bar
30, 35, baz

此外,您可以使用c_[list1, list2, list3]代替zip(list1, list2, list3)。然后savetxt函数将处理将该参数转换为数组。

In [57]: list1 = [100000, 200000, 300000]

In [58]: savetxt('result.csv', zip(list1, list2, list3), fmt='%s, %s, %s')

In [59]: !cat result.csv
100000, 15, foo
200000, 25, bar
300000, 35, baz

显然c_找不到适当长度的字符串做得不好:

In [60]: c_[list1, list2, list3]
Out[60]: 
array([['100', '15', 'foo'],
       ['200', '25', 'bar'],
       ['300', '35', 'baz']], 
      dtype='|S3')

顺便说一下,你的数据还没有出现在数组中,所以我不认为你使用savetxt而不是标准库csv获得了很多收益。例如,

In [61]: import csv

In [62]: with open('result.csv', 'w') as f:
   ....:     wrtr = csv.writer(f)
   ....:     wrtr.writerows(zip(list1, list2, list3))
   ....:     

In [63]: !cat result.csv
100000,15,foo
200000,25,bar
300000,35,baz