如何读取csv并按组聚合数据?

我们有一个 csv 文件,并在下面编写代码来进行分组并获取最大值并创建输出文件。但是,在使用数据帧 read_csv 读取最终输出文件时,它显示为空。


Input file: 


Manoj,2020-01-01 01:00:00

Manoj,2020-02-01 01:00:00

Manoj,2020-03-01 01:00:00

Rajesh,2020-01-01 01:00:00

Rajesh,2020-05-01 01:00:00

Suresh,2020-04-01 01:00:00


Final output file:


Manoj,2020-03-01 01:00:00

Rajesh,2020-05-01 01:00:00

Suresh,2020-04-01 01:00:00

然后当我尝试使用 df.read_Csv 读取上面的最终输出文件时,它显示数据帧为空。


import os

import re

import pandas as pd

z=open('outfile.csv','w')

fin=[]

k=open('j.csv','r')

for m in k:

    d=m.split(',')[0]

    if d not in fin:

        fin.append(d.strip())


for p in fin:

    gg=[]

    g=re.compile(r'{0}'.format(p))

    y=open('j.csv','r')

    for b in y:

        if re.search(g,b):

            gg.append(b)

    z.write(gg[-1].strip())

    z.write('\n')


df = pd.read_csv("outfile.csv", delimiter=',', names=['Col1','Col2'], header=0)


print(df)


final output: Empty DataFrame , Index: []

有什么我错过的吗,请大家推荐一下...


尚方宝剑之说
浏览 123回答 2
2回答

慕婉清6462132

没有必要使用for-loop来处理文件。数据聚合更容易完成pandas。您的显示没有标题,因此请使用、 、csv读取文件,并使用正确格式化日期时间列。 pandas.read_csvheader=Noneparse_dates具有日期时间的列显示在列索引 1 处,因此parse_dates=[1]这假设数据从文件中的第 0 行开始并且没有标题,如 OP 中所示。为列创建标题根据评论,可以使用访问器date访问的组件。'datetime'.dt.groupby上name并聚合.max()import pandas as pd# read the file j.csvdf = pd.read_csv('j.csv', header=None, parse_dates=[1])# add headersdf.columns = ['name', 'datetime']# select only the date component of datetimedf.datetime = df.datetime.dt.date# display(df)     name    datetime0   Manoj  2020-01-011   Manoj  2020-02-012   Manoj  2020-03-013  Rajesh  2020-01-014  Rajesh  2020-05-015  Suresh  2020-04-01# groupbydfg = df.groupby('name')['datetime'].max().reset_index()# display(dfg)     name    datetime0   Manoj  2020-03-011  Rajesh  2020-05-012  Suresh  2020-04-01# save the file. If the headers aren't wanted, use `header=False`dfg.to_csv('outfile.csv', index=False)

凤凰求蛊

创建数据框import pandas as pddf=pd.DataFrame(zip(    ['Manoj','Manoj','Manoj','Rajesh','Rajesh','Suresh'],    ['2020-01-01','2020-02-01','2020-03-01','2020-01-01','2020-05-01','2020-04-01'],    ['01:00:00','01:00:00','01:00:00','01:00:00','01:00:00','01:00:00']),    columns=['name','date','time'])将日期和时间从字符串转换为日期和时间对象df['date']=pd.to_datetime(df['date'], infer_datetime_format=True).dt.datedf['time']=pd.to_datetime(df['time'],format='%H:%M:%S').dt.time采取分组方式out=df.groupby(by=['name','time']).max().reset_index()您可以保存并再次加载out.to_csv('out.csv',index=False)df1=pd.read_csv('out.csv')结果    name      time        date0   Manoj  01:00:00  2020-03-011  Rajesh  01:00:00  2020-05-012  Suresh  01:00:00  2020-04-01抱歉,我为日期和时间创建了两个单独的列,但我希望您能理解
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python