我有三个列表,我想使用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 = '')
非常感谢您的帮助!
答案 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