如何使用python将同一行中的字符串和数组保存到csv中?

2024-10-02 16:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个向量,它是np.array([[1,2,3]])

我想把向量和向量的名字保存在同一行

例如

向量1 2 3

矢量2 4 5 6

向量3 7 8 9

那么,我曾经这样试过

import csv
import numpy as np
a=np.array([[1,2,3]])
b='Vector1'
c=[b,a]
with open ('testfile.csv','ab') as fxx:
        w=csv.writer(fxx)
        for row in c:
            w.writerow(row)

结果是 enter image description here

我也试过这个

import csv
import numpy as np
a=np.array([[1,2,3]])
b='Vector1'
c=np.append(b,a)
with open ('testfile3.csv','ab') as fxx:
        w=csv.writer(fxx)
        for row in c:
            w.writerow(row)

结果是 enter image description here

但我想要的结果是 enter image description here


Tags: csvimportnumpyforabaswithnp
3条回答

writerow()需要一个序列,其中每个元素将填充一列,即

`writer.writerow(["foo", 42, "bar")

将导致(引号和分隔符取决于writer参数):

"foo",42,"bar"

在代码中创建一个列表c,如下所示:

c=['Vector1', [[1, 2, 3]]]

你的第一个元素是一个字符串,第二个元素是一个元素的列表,这是另一个列表

然后迭代这个列表,把它的每个元素传递给你的作者,所以基本上你要做的是:

writer.writerow("Vector1")
writer.writerow([[1, 2, 3]])

对于第一行,因为字符串是序列,所以它将为每个字符填充一列,结果是(引号和delim取决于writer配置):

"V","e","c","t","o","r","1"

对于第二个,因为您传递了一个元素的列表,它将用列表中单个元素的字符串表示形式填充一个列:

"[1, 2, 3]"

如果你想要的是

"Vector1",1,2,3

那么显而易见的解决方案是将正确的序列传递给writerow

writer.writerow(["Vector1", 1, 2, 3])

现在您只需更改代码以正确生成此序列

import pandas as pd
a = [[1, 2, 3]]
b = 'Vector1'
a[0].append(b)
print(a)
df = pd.DataFrame(a)
print(df)
df.to_csv('data.csv')

输出:

 0  1  2        3
0  1  2  3  Vector1
import csv
import numpy as np
a=np.array([[1,2,3]])
b='Vector1'
c=np.append(b,a)
print(c)
with open ('testfile3.csv','a') as fxx:
        w=csv.writer(fxx)
        w.writerow(c)

相关问题 更多 >