使用 Python [pandas] 聚合 csv 中特定时期的数据
你好。
我的梦想很强烈,但我的内心却很动摇。我是系统解决方案部的卡瓦。
这是一个令人愉快的季节。
所以这次
我想主要使用Python基础数据分析库“pandas”来聚合来自csv文件的大量数据。
环境
使用的操作系统:Microsoft Windows 10 Pro
Python版本:3.10.4
大局
从日期时间导入 pandas 作为 pd 导入日期时间作为 dt 导入集合导入 itertools df = pd.read_csv('<文件名>.csv', usecols=['datetime', 'person_in_charge'], 编码='cp932' ) df_date = df 。 set_index('datetime') #用于错误检查 def check(x): #print(x) pd.to_datetime(x) df_date.index.map(check) df_date.index=pd.to_datetime(df_date.index,format= ' %Y%m%d %H:%M') df_date.sort_index(inplace=True) df_date['count'] = 1 df_multi = df_date.set_index([df_date.index.year, df_date.index.month, df_date . index.weekday, df_date.index.hour, df_date.index]) df_multi.index.names = ['年', '月', '工作日', '小时', '日期'] df_date['person_in_charge'] = df_date ['person_in_charge'].str.split(',') all_tag_list = list(itertools.chain.from_iterable(df_date['person_in_charge'])) c = collections.Counter(itertools.chain.from_iterable(df_date['person_in_charge' ]) )) 标签 = pd.Series(c) df_tag_list = [] top_tag_list = Tags.sort_values(ascending=False).index[:11].tolist() for t in top_tag_list: df_tag = df_date[df_date['person_in_charge'] 。 apply(lambda x: t in x)] df_tag_list.append(df_tag[['count']].resample('1M').sum()) df_tags = pd.concat(df_tag_list, axis=1) df_tags.columns = top_tag_list df_tags.to_csv('结果.csv', 编码='cp932') print("完成")
目的和准备
作为原始数据的csv文件
包含大量信息,包括收到询问的日期(格式为yyyy/mm/dd)以及收到询问的负责人姓名。
作为预处理,日期列名称设置为“datetime”,负责人姓名设置为“person_in_charge”。
由于它使用 pandas 作为库,因此需要
从 pip 安装 (Anaconda等其他环境请参考链接)
部分解释
▼ 使用 pandas 加载文件。 csv 文件与代码文件放置在同一文件夹中。
df = pd.read_csv('<文件名>.csv', usecols=['datetime', 'person_in_charge'], 编码='cp932' )
▼ 使用 df.set_index 将“datetime”列分配给索引。
*后一部分是检查是否有空白单元格,所以可以省略。
df_date = df.set_index('datetime') def check(x): pd.to_datetime(x) df_date.index.map(check)
▼ 将数据类型转换为日期时间格式并排序
df_date.index=pd.to_datetime(df_date.index,format='%Y%m%d %H:%M') df_date.sort_index(inplace=True) #添加count列用于重采样 df_date['count' ] = 1
▼ 按天或时间分组或计数
df_multi = df_date.set_index([df_date.index.year, df_date.index.month, df_date.index.weekday, df_date.index.hour, df_date.index]) df_multi.index.names = ['year', 'month' , '工作日', '小时', '日期'] df_date['person_in_charge'] = df_date['person_in_charge'].str.split(',') all_tag_list = list(itertools.chain.from_iterable(df_date['person_in_charge') ])) 将 #iiterate 传递给集合。统计每个标签出现的次数 c = collections.Counter(itertools.chain.from_iterable(df_date['person_in_charge'])) #转换为系列 Tags = pd.Series(c)
▼ 在 DataFrame 中存储标签
df_tag_list = [] top_tag_list = Tags.sort_values(ascending=False).index[:11].tolist()
▼ 这就是关键:如果把“df_tag_list.append(df_tag[['count']].resample('1M').sum())”的“1M”部分改为
“2W”,例如需要 2 周 如果您选择“7D”,您可以每 7 天收集一次数据。
对于 top_tag_list 中的 t: df_tag = df_date[df_date['person_in_charge'].apply(lambda x: t in x)] df_tag_list.append(df_tag[['count']].resample('1M').sum()) df_tags = pd.concat(df_tag_list, axis=1) df_tags.columns = top_tag_list
▼ 将聚合数据输出到新文件
df_tags.to_csv('result.csv',encoding='cp932') #完成后输出“done” print("done")
输出结果
整理
每月数据
如果你根据需要按周或按天汇总并装饰好,就可以在会议上用作数据!
再见!
如果您觉得这篇文章有帮助,请点赞!