为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

尚方宝剑之说 2023-08-08 16:52:29
我们有一个 csv 文件,并在下面编写代码来进行分组并获取最大值并创建输出文件。但是,在使用数据帧 read_csv 读取最终输出文件时,它显示为空。Input file: Manoj,2020-01-01 01:00:00Manoj,2020-02-01 01:00:00Manoj,2020-03-01 01:00:00Rajesh,2020-01-01 01:00:00Rajesh,2020-05-01 01:00:00Suresh,2020-04-01 01:00:00Final output file:Manoj,2020-03-01 01:00:00Rajesh,2020-05-01 01:00:00Suresh,2020-04-01 01:00:00然后当我尝试使用 df.read_Csv 读取上面的最终输出文件时,它显示数据帧为空。import osimport reimport pandas as pdz=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: []有什么我错过的吗,请大家推荐一下...
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

  • 没有必要使用for-loop来处理文件。数据聚合更容易完成pandas

  • 您的显示没有标题,因此请使用、 、csv读取文件,并使用正确格式化日期时间列。 pandas.read_csvheader=Noneparse_dates

    • 具有日期时间的列显示在列索引 1 处,因此parse_dates=[1]

    • 这假设数据从文件中的第 0 行开始并且没有标题,如 OP 中所示。

  • 为列创建标题

  • 根据评论,可以使用访问器date访问的组件。'datetime'.dt

  • .groupbyname并聚合.max()

import pandas as pd


# read the file j.csv

df = pd.read_csv('j.csv', header=None, parse_dates=[1])


# add headers

df.columns = ['name', 'datetime']


# select only the date component of datetime

df.datetime = df.datetime.dt.date


# display(df)

     name    datetime

0   Manoj  2020-01-01

1   Manoj  2020-02-01

2   Manoj  2020-03-01

3  Rajesh  2020-01-01

4  Rajesh  2020-05-01

5  Suresh  2020-04-01


# groupby

dfg = df.groupby('name')['datetime'].max().reset_index()


# display(dfg)

     name    datetime

0   Manoj  2020-03-01

1  Rajesh  2020-05-01

2  Suresh  2020-04-01


# save the file. If the headers aren't wanted, use `header=False`

dfg.to_csv('outfile.csv', index=False)


查看完整回答
反对 回复 2023-08-08
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

创建数据框


import pandas as pd

df=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.date

df['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        date

0   Manoj  01:00:00  2020-03-01

1  Rajesh  01:00:00  2020-05-01

2  Suresh  01:00:00  2020-04-01

抱歉,我为日期和时间创建了两个单独的列,但我希望您能理解


查看完整回答
反对 回复 2023-08-08
  • 2 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信