首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >列的元组的Python csv列表

列的元组的Python csv列表
EN

Stack Overflow用户
提问于 2018-07-22 05:45:40
回答 2查看 958关注 0票数 0

我有一个(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。我的问题是,它不是按列而是按行保存的:

假设的输出应如下所示:

我在这里做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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
票数 1
EN

Stack Overflow用户

发布于 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()。熊猫确实提供了更多的功能和更好的效率。但不要过早地进行优化。如果这能满足您的所有需求,并且您不会遇到问题,那么您可以逃脱惩罚。熊猫确实需要一些时间来学习,但从长远来看,如果你想做更多这样的事情,这可能是值得的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51460366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档