在csv文件中创建一个重复的行以分隔列中的多个值(python)

云南猫

我正在尝试在 Python 中构建一些代码,将列中的多个值分成单独的行,并Active-Ticket根据时间戳的同一天聚合列,是否可以使用任何内部库,或者我是否需要安装外部库?

我的示例文件是(目前,Active-Tickets 列是空的):

输入.csv

Timestamp,CaseID,Active-Tickets   
14FEB2017:10:55:23,K456 G578 T213,        
13FEB2017:10:56:12,F891 A63,
14FEB2017:11:59:14,T427 T31212 F900000,
15FEB2017:03:55:23,K456 G578 T213,        
14FEB2017:05:56:12,F891 A63,

我正在努力实现的目标:

输出.csv

Timestamp,CaseID,Active-Tickets
14FEB2017:10:55:23,K456,8 (because there are 8 cases happened on the same day)
14FEB2017:10:55:23,G578,8
14FEB2017:10:55:23,T213,8        
13FEB2017:10:56:12,F891,2 (because there are 2 cases happened on the same day)
13FEB2017:10:56:12,A63,2
14FEB2017:11:59:14,T427,8
14FEB2017:11:59:14,T31212,8
14FEB2017:11:59:14,F900000,8
15FEB2017:03:55:23,K456,3 (because there are 3 cases happened on the same day)
15FEB2017:03:55:23,G578,3
15FEB2017:03:55:23,T213,3        
14FEB2017:05:56:12,F891,8
14FEB2017:05:56:12,A63,8

我的想法是:

  1. 获取列 Timestamp 的值

  2. 检查日期是否相同,

  3. 将所有由空格分隔的 CaseID 存储到基于日期的列表中,

  4. 计算每个日期列表中元素的数量然后

  5. 将计数元素的值返回到 中Active-Tickets

但是这里的问题是,数据量不小,假设一天最少有50个案例,那我觉得我的方式不太可能。

斯蒂芬·劳赫

这是使用itertools.chain.from_iterable(). 它只将计数保留在内存中,因此可能适用于您的情况。它读取csv文件两次。一次获取计数,一次写入输出,但仅使用迭代器进行读取,因此应减少内存需求。

代码:

import csv
import itertools as it
from collections import Counter

# read through file and get counts per date
with open('test.csv', 'rU') as f:
    reader = csv.reader(f)
    header = next(reader)
    dates = it.chain.from_iterable(
        [date for _ in ids.split()]
        for date, ids in ((x[0].split(':')[0], x[1]) for x in reader))
    counts = Counter(dates)

# read through file again, and output as individual records with counts
with open('test.csv', 'rU') as f:
    reader = csv.reader(f)
    header = next(reader)
    records = it.chain.from_iterable(
        [(l[0], d) for d in l[1].split()] for l in reader)
    new_lines = (l + (str(counts[l[0].split(':')[0]]), ) for l in records)

    with open('test2.csv', 'wb') as f_out:
        writer = csv.writer(f_out)
        writer.writerow(header)
        writer.writerows(new_lines)

结果:

Timestamp,CaseID,Active-Tickets
14FEB2017:10:55:23,K456,8
14FEB2017:10:55:23,G578,8
14FEB2017:10:55:23,T213,8
13FEB2017:10:56:12,F891,2
13FEB2017:10:56:12,A63,2
14FEB2017:11:59:14,T427,8
14FEB2017:11:59:14,T31212,8
14FEB2017:11:59:14,F900000,8
15FEB2017:03:55:23,K456,3
15FEB2017:03:55:23,G578,3
15FEB2017:03:55:23,T213,3
14FEB2017:05:56:12,F891,8
14FEB2017:05:56:12,A63,8

2.6 中的计数器

collections.Counter已为 python 2.5+ 反向移植(此处

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从多个.csv文件在一个图形中创建多个图

将多个CSV文件中的列数据合并到一个CSV文件中

创建多个csv文件并使用rails在一个zip归档文件中全部下载

将多个列值作为逗号分隔的值放入一个列中

创建新列以将与另一列中的另一个重复值相对应的值排列在一行中

Unix:在csv文件的列中查找重复的事件,省略一个可能的值

创建一个新的Excel列,并使用PANDAS在列的每一行中重复出现一个值的次数

使用c#从一个csv文件中按值拆分多个csv文件

如何在解析python中的json数据时解析多个索引值并创建一个csv文件

读取CSV文件中的行并附加一个列表会为每个值创建一个列表列表

如果多个列中的任何一个在Pandas中有重复的行,则删除行

我有一个CSV文件,其中A列中的某些行是重复的,但是我需要合并B列的内容

从一个CSV创建多个文件,从一个列中的每个值创建一个文件[Powershell]

将一个CSV的行值映射到另一个CSV的标题值,并在python中写入新的CSV文件

检查另一个csv文件中每一行的csv文件值

如何通过python将行追加到CSV文件中,并用逗号分隔新行和上一个

从具有多个值的行中随机选择1个值;用清除的数据创建一个新列

我想基于多个分隔符在一个熊猫数据框的列中拆分文本,并为每个分隔符创建新行

合并多个csv文件,在合并的文件中创建一个新列,该列中具有示例名称

如何从带有“ x”个字符后的列分隔符的txt文件中创建一个csv文件

删除CSV中包含一个重复值的连续行,但保留最后一行

在Perl中,如何解析一个CSV文件,其中的字段包含逗号分隔的值?

从多个csv文件中抓取一个特定的列并合并为一个

将多个值合并到一个新列中的一行 Pandas Python

更新程序以在 python 中创建一个 CSV 文件

从 csv 文件中读取一个值 dash python

在python中创建一个CSV文件

如何在一个 csv 列中写入分号分隔值?

如何创建一个汇总重复行的列,然后仅删除 R 中的一个重复项?