首页 新闻 会员 周边

【python】如何读取CSV文件后合并内容?

-1
[已解决问题] 解决于 2018-02-23 19:57

①test.csv中的内容:
cmd,opt
cmd1,opt1
cmd2,opt2 opt3 opt4
cmd2,opt2 opt5 opt6 opt7
cmd2,opt2 opt8 opt9 opt10

②用下面的方法读取CSV文件
import pandas as pd
data = pd.read_csv('test.csv')

③以cmd列为主键,合并opt列
变成下面的格式:
cmd1,opt
cmd2,opt2 opt3 opt4 opt2 opt5 opt6 opt7 opt2 opt8 opt9 opt10

请各位大神不吝赐教~!

芽衣的主页 芽衣 | 菜鸟二级 | 园豆:384
提问于:2018-02-20 09:38
< >
分享
最佳答案
0

最后自己解决了,其实我想要的结果不只是合并,目的是计算各个opt出现的比例。

 1 df = pd.read_csv('test.csv',encoding='cp932')
 2 useRateF = ('test_new.csv')
 3 
 4 index_list_cmd = []
 5 #获取cmd列
 6 index_list_cmd = df.cmd.values
 7 idxLstCmd_cnt = Counter(list(index_list_cmd))
 8 #删除重复元素
 9 index_list_cmd = sorted(set(list(index_list_cmd)), key=list(index_list_cmd).index)
10 
11 #计算cmd出现的次数
12 cntLst = []
13 for lst_i in range(len(index_list_cmd)):
14     cntLst.append(idxLstCmd_cnt[index_list_cmd[lst_i]])
15 
16 #合并opt列
17 index_list_opt_idx = []
18 
19 #删除之前保存的文件
20 if os.path.isfile(useRateF):
21     os.remove(useRateF)
22 
23 for cmd_i in range(len(index_list_cmd)):
24     #获得opt列的index
25     index_list_opt_idx = list(df.opt[df.cmd == index_list_cmd[cmd_i]].index.values)
26     index_list_opt = []
27     for opt_i in range(len(index_list_opt_idx)):
28         #生成新的列表
29         try:
30             index_list_opt.append(df.loc[int(index_list_opt_idx[opt_i]),'opt'])
31         except:
32             print(index_list_cmd[cmd_i])
33             print(index_list_opt_idx[opt_i])
34             print(opt_i)
35         #列表→字符串
36         str_idxLstOpt = ' '.join(index_list_opt)
37         #字符串→列表
38         lst_idxLstOpt = str_idxLstOpt.split(' ')
39     #计算opt出现的比例
40     for tag in sorted(set(lst_idxLstOpt), key=lst_idxLstOpt.index):
41         with open(useRateF, 'a',encoding='utf-8_sig') as uf:
42             uf.writelines(str(index_list_cmd[cmd_i]) + ',' + tag + ',' + str(lst_idxLstOpt.count(tag)/cntLst[cmd_i]))
43             uf.writelines('\n')
芽衣 | 菜鸟二级 |园豆:384 | 2018-02-23 19:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册