我有一个(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。我的问题是,它不是按列而是按行保存的:
假设的输出应如下所示:
我在这里做错了什么?
发布于 2018-07-22 07:03:02
尽管Zev提供了很大的帮助,但我最终还是听从了Massoud Hosseinali的建议,选择了pandas,它更高效、更简洁。
如果我将数据保存为包含元组的列表列表:[[(,)]]
,则可以简单地迭代每个子列表,将元组转换为pd.Series
,将其转换为pd.DataFrame
,然后使用pd.to_csv
将其另存为.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
发布于 2018-07-22 05:54:35
给定您的数据:
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]
)
]
我们需要将其转换为您可以逐行编写的内容。Zip运行良好:
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()
。熊猫确实提供了更多的功能和更好的效率。但不要过早地进行优化。如果这能满足您的所有需求,并且您不会遇到问题,那么您可以逃脱惩罚。熊猫确实需要一些时间来学习,但从长远来看,如果你想做更多这样的事情,这可能是值得的。
https://stackoverflow.com/questions/51460366
复制相似问题