【发布时间】:2015-03-17 17:49:00
【问题描述】:
我有一个 CSV 文件,其中包含 3 列“嵌套”的 CSV 数据。我想将这些 CSV 列的内容拆分出来,为每个 CSV 项目创建一个新行,为每个项目添加一个序列号(对应于 CSV 列中序列中项目的顺序),然后添加一个对应于它来自的 CSV 列的相应 ItemID 编号。我需要把下面的 Table1 变成 Table2 的样子。
Table1(原始 CSV 文件)。第一行是列名:
StoreID,Date,StoreName,City,State,Category1CSV,Category2CSV,Category3CSV
1051,2/16/2014,Easton,Columbus,OH,"Flour,Yeast,Baking Powder","Milk,Water,Oil","Cinnamon,Sugar"
1425,1/14/2014,Crocker Park,Westlake,OH,"Baking Powder,Yeast,Four","Oil,Milk,Water"
Table2(拆分 CSV 列内容后)。第一行是列名:
StoreID,Date,StoreName,City,State,ItemName,ItemRank,ItemCategory
1051,2/16/2014,Easton,Columbus,OH,Flour,1,1
1051,2/16/2014,Easton,Columbus,OH,Yeast,2,1
1051,2/16/2014,Easton,Columbus,OH,Baking Powder,3,1
1051,2/16/2014,Easton,Columbus,OH,Milk,4,2
1051,2/16/2014,Easton,Columbus,OH,Water,5,2
1051,2/16/2014,Easton,Columbus,OH,Oil,6,2
1051,2/16/2014,Easton,Columbus,OH,Cinnamon,7,3
1051,2/16/2014,Easton,Columbus,OH,Sugar,8,3
1425,1/14/2014,Crocker Park,Westlake,OH,Baking Powder,1,1
1425,1/14/2014,Crocker Park,Westlake,OH,Yeast,2,1
1425,1/14/2014,Crocker Park,Westlake,OH,Flour,3,1
1425,1/14/2014,Crocker Park,Westlake,OH,Oil,4,2
1425,1/14/2014,Crocker Park,Westlake,OH,Milk,5,2
1425,1/14/2014,Crocker Park,Westlake,OH,Water,6,2
标记为 Category1CSV、Category2CSV 和 Category3CSV 内容的表 1 列映射到表 2 列:ItemName、ItemRank、ItemCategory,其中:
- ItemName 是项目(例如:面粉),
- ItemRank 是项目在 CSV 列表中的顺序,而
- ItemCategory 为 1,2 或 3,具体取决于数据来自 Category1CSV、Category2CSV 还是 Category3CSV。
最重要的方面是在 CSV 列中的项目被拆分到新行时保持它们的顺序。例如,StoreID 1051 的 Category1CSV 内容为“Flour,Yeast,Baking Powder”。这些将映射到 ItemName、ItemRank(序列号)和 ItemCategory 列,这样 ItemName = Flour、ItemRank = 1、ItemCategory = 1。这将是表 2 中的第一行。第二行是 ItemName = Yeast,它的 ItemRank = 2,ItemCategory = 1,依此类推,直到你最终得到类似于上面表 2 的结果。此外,您会注意到 ItemRank 编号从 Category1CSV 列的内容开始,然后是 Category2CSV,最后是 Category3CSV。
并非原始 CSV 文件中的所有行在所有 3 个 CSV 列中都有项目。例如,商店 1051 拥有所有 3 个类别的商品,但商店 1425 仅拥有类别 1 和 2 中的商品。其他商店可能只有 1 个类别中的商品。在处理文件时,某些逻辑需要考虑到这一点。
我的 CSV 文件包含几千行。生成的文件可能会有数万行。
我该怎么做?
【问题讨论】:
-
这看起来是一个非常混乱的问题,您介意格式化以便阅读吗?同时提供您的代码并指出您遇到的问题。
-
@DanielJimenez,这有点麻烦。我目前没有任何代码。我只有 CSV 文件。你希望我如何重新格式化它?这些表格是我唯一可以在这里格式化的东西。
-
这很难理解。另外,我认为用户不会欣赏您希望他们只为您编写代码。
-
@DanielJimenez,我对 Python 的经验为零,这就是为什么我没有任何代码可以分享给小组的原因。这不像是我懒惰。我正在阅读 O'Reilly 的几本书来学习。我今天刚刚安装了 Python 3.4 和 PyCharm。我同意,这很难理解......我会尽量让它更容易。我只需要将 Table1 中的格式设置为 Table2 中的格式即可。
-
我不希望任何人花费数小时为我创建代码。如果有人至少可以帮助我入门,我将不胜感激。我尝试使用 Excel 宏和 SQL 来解决这个问题,但似乎 Python 的优势之一是解析和使用 CSV、XML 等。我昨晚才知道,所以我很高兴看到Python可以做到。如果有人至少可以让我开始,将不胜感激。
标签: python csv python-3.x