【发布时间】:2016-05-22 08:50:49
【问题描述】:
我有一个 csv 文件,第一行包含产品名称,第二行包含数据标题,从第三行开始包含每个用户状态的实际数据。
而 csv 文件如下所示:
adidas,,
USER_ID,USER_NAME
b012345,zaihan,Process
b212345,nurhanani,Check
b843432,nasirah,Call
b712345,ibrahim,Check
nike,,
USER_ID,USER_NAME
b842134,khalee,Call
h123455,shabree,Process
b777345,ibrahim,Process
b012345,zaihan,Check
b843432,nasirah,Call
b312451,nurhanani,Process
我想明智地拆分数据产品并重新排列标题和数据,如下所示:
来自这样的标题
adidas,, USER_ID,USER_NAME b012345,zaihan,Process这样的标题
USER_ID,USER_NAME,adidas b012345,zaihan,Process
我已经编写代码一段时间了,我认为我必须对标题进行硬编码(例如,“adidas”和“nike”),因为我从阅读 SO 答案中了解到,我需要唯一的标题名称并且以下代码没有得到我想要的:
我的python代码是:
import csvkit
import sys
import os
from csvkit import convert
with open('/tmp/csvdata.csv', 'rb') as q:
reader = csvkit.reader(q)
with open('/tmp/csvdata2.csv', 'wb') as s:
data = csvkit.writer(s)
data.writerow(['Name', 'Userid', 'adidas', 'nike'])
for row in reader:
row_data = [row[0], row[1], row[2], '']
data = csvkit.writer(s)
data.writerow(row_data)
编辑
所以我从@piRSquared 那里得到了一个解决方案,如果产品有唯一的记录集,这是正确的,但同一产品的每个用户可能有多个状态。并且解决方案给了ValueError: Index contains duplicate entries, cannot reshape
输入 CSV 数据具有多个状态并会导致此问题的示例:
adidas,,
USER_ID,USER_NAME
b012345,zaihan,Process
h003455,shabree,Check
b212345,nurhanani,Check
b843432,nasirah,Call
b712345,ibrahim,Check
b712345,ibrahim,Process
nike,,
USER_ID,USER_NAME
b842134,khalee,Call
h123455,shabree,Process
b777345,ibrahim,Process
b012345,zaihan,Check
b843432,nasirah,Call
b312451,nurhanani,Process
我希望能达到这样的结果,貌似同一个品牌类别的用户可以有相同的id,name,同时Process和Check。
USER_ID,USER_NAME,adidas,nike
b012345,zaihan,Process
h003455,shabree,Check,Process
b212345,nurhanani,Check,Process
b843432,nasirah,Call,Call
b712345,ibrahim,Check
b712345,ibrahim,Process
b777345,ibrahim,,Process
b842134,khalee,,Call
对于在同一品牌中同时具有 Check 和 Process 的用户(在本例中为 耐克品牌的用户 ibrahim)
【问题讨论】:
-
你的问题是什么?
-
你真的有USERNAME和USER_NAME吗?
-
很抱歉,应该是 USER_NAME
-
我们可以一直认为标题是大写的吗?
-
是的,我想我可以编写另一个 python 脚本来将“adidas”和“nike”设为大写,这是一个可以找到并替换它的硬代码。
标签: python python-2.7 csv pandas