我有一个(x,y)元组的列表,既是它们的x和y列表,例如:
[
([44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676]
, [42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595])
]
主要思想是在此列表中有多个元组,仅出于示例目的使用了一个元组。
我需要将元组中的每个列表放入电子表格列,并使用以下代码进行操作:
def saveSpreadsheet(fpath, fname, list):
index = 1
for sublist in list:
with open(os.path.join(fpath, fname + str(index) + '.csv'), 'w', newline='') as myfile:
writer = csv.writer(myfile, delimiter=';')
writer.writerow(("training","test"))
for row in sublist:
writer.writerow(row)
index += 1
该方法采用文件夹路径,文件名和所述列表,并生成一个csv。我的问题是它不是保存在列中而是保存在行中:
假定的输出应如下所示:
我在这里做什么错了?
答案 0 :(得分:1)
提供您的数据:
data = [
(
[44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676],
[42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595]
)
]
我们需要将其转换为可以逐行编写的内容。邮编效果很好:
for a in zip(data[0][0], data[0][1]):
print(a)
导致的结果:
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
我认为您在其他方面有很好的处理能力,可以对此进行调整。有关更多详细信息,请参见以下类似(重复的问题):Python: CSV write by column rather than row
评论中的建议都提供了很好的建议。如果不能保证列的长度相等,则可以使用itertools.zip_longest()
。熊猫确实提供了更多的功能和更高的效率。但是不要过早优化。如果这满足了您的所有需求,并且您没有遇到任何问题,那么您可以避免这种情况。熊猫确实需要花费一些时间来学习,但是从长远来看,如果您会做更多的事情,这可能是值得的。
答案 1 :(得分:1)
尽管Zev提供了很大的帮助,但我最终还是遵循了Massoud Hosseinali的建议,并选择了熊猫,这更加有效和简洁。
与其具有像以前一样的列表的元组列表:[([],[])]
,如果我将它们的数据保存为包含元组的列表列表:[[(,)]]
,我可以简单地遍历每个子列表,将元组放入pd.Series
,将其转换为pd.DataFrame
,然后使用.csv
保存为pd.to_csv
。
这是结果代码:
def saveSpreadsheet(fpath, fname, list):
index = 1
labels = ['training', 'test']
for sublist in list:
training = pd.Series(sublist[0])
test = pd.Series(sublist[1])
df = pd.DataFrame({'training':training.values, 'test':test.values})
df.to_csv(os.path.join(fpath, fname + str(index) + '.csv'), sep=";", index=False)
index += 1