我正在使用Python 3.6.8,并且我一直在寻找一点白色,但是仍然无法正确导出到想要的csv中。
我有一个一维数组的列表,我试图将其导出到CSV文件中。每个数组都有不同的大小,我想按列顺序导出它们,这意味着每个1D数组将存储到CSV文件的1列中。
为简化我的代码,它将执行以下操作:
import pandas as pd
list_of_thing = []
a = np.arange(10)
list_of_thing.append(a)
b = np.arange(5)
list_of_thing.append(b)
csvfile = "./data.csv"
my_df = pd.DataFrame(list_of_thing)
my_df.to_csv(csvfile, index=False, header=False)
我还尝试使用np.savetext
和with open(csvfile, "w") as output:
并没有太大的成功。
我得到的是这个
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4
我希望它看起来像这样
0 0
1 1
2 2
3 3
4 4
5
6
7
8
9
在附加的地方,我在考虑是否有可能通过指定应在其处的列来保存每次数组。
答案 0 :(得分:2)
尽管我不确定为什么您要以这种方式形成df。
使用:
SELECT '2018-06-25T06:00:00Z'::TIMESTAMPTZ AT TIME ZONE 'Europe/Helsinki';
答案 1 :(得分:0)
这里是一种将不同大小的列表输入到列的方法,我用字符“”填充了较小的列表:
import pandas as pd
a = np.arange(10)
b = np.arange(5)
maxLen = max(len(a), len(b))
fill_char = ""
a = list(a) + [fill_char]*(maxLen - len(a))
b = list(b) + [fill_char]*(maxLen - len(b))
my_df = pd.DataFrame(list(zip(a,b)),columns=["col1","col2"])
print(my_df)
col1 col2
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 5
6 6
7 7
8 8
9 9
答案 2 :(得分:0)
您可以使用zip_longest
来“转置”具有空白填充值的数组列表:
In [120]: from itertools import zip_longest
In [129]: alist = list(zip_longest(np.arange(10), np.arange(5),fillvalue=''))
In [130]: alist
Out[130]:
[(0, 0),
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, ''),
(6, ''),
(7, ''),
(8, ''),
(9, '')]
(默认填充值为None
)
然后将其写入一个文件,一个元组一个元组:
In [131]: with open('foobar.txt','w') as f:
...: for row in alist:
...: print('{} {}'.format(*row), file=f)
...:
In [132]: cat foobar.txt
0 0
1 1
2 2
3 3
4 4
5
6
7
8
9
这也可以用savetxt编写:
np.savetxt('foobar.txt',alist, fmt='%s')
对于string元素,我必须使用'%s'formatting rather than a numeric one.
savetxt`进行行迭代,所以速度不会更快。
您可能必须使用列宽和定界符,尤其是在左侧有简短列表的情况下。