2 回答
TA贡献1804条经验 获得超2个赞
没有必要使用
for-loop
来处理文件。数据聚合更容易完成pandas
。您的显示没有标题,因此请使用、 、
csv
读取文件,并使用正确格式化日期时间列。pandas.read_csv
header=None
parse_dates
具有日期时间的列显示在列索引 1 处,因此
parse_dates=[1]
这假设数据从文件中的第 0 行开始并且没有标题,如 OP 中所示。
为列创建标题
根据评论,可以使用访问器
date
访问的组件。'datetime'
.dt
.groupby
上name
并聚合.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)
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
抱歉,我为日期和时间创建了两个单独的列,但我希望您能理解
添加回答
举报