[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

使用 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")

输出结果

整理
每月数据
如果你根据需要按周或按天汇总并装饰好,就可以在会议上用作数据!

再见!

如果您觉得这篇文章有帮助,请点赞!
6
加载中...
6 票,平均:1.00 / 16
2,004
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

写这篇文章的人

关于作者

川健

属于系统解决方案部的
好奇的 Poke○n