pythonexcel工具介绍_工具篇:EXCEL与python的对比 如何汇总数据.md

工具篇:EXCEL与python的对比 如何汇总数据

第7章 数据汇总

本章主要讲解如何对数据进行分类汇总。

Excel中使用分类汇总和数据透视可以按特定维度对数据进行汇总

Python中使用的主要函数是groupby和pivot_table。下面分别介绍这两个函数的使用方法。

1. 分类汇总

Excel的数据目录下提供了“分类汇总”功能,可以按指定的字段和汇总方式对数据表进行汇总。

41d8cd3d3e5ca185c630c47a4388489d.png

Python中通过Groupby函数完成相应的操作,并可以支持多级分类汇总

Groupby是进行分类汇总的函数,使用方法很简单,制定要分组的列名称就可以,也可以同时制定多个列名称,groupby按列名称出现的顺序进行分组。同时要制定分组后的汇总方式,常见的是计数和求和两种。

#对所有列进行计数汇总

df_inner.groupby('city').count()/

aeb50fd3632f4a76c45999ef133d364b.png

可以在groupby中设置列名称来对特定的列进行汇总。下面的代码中按城市对id字段进行汇总计数。

#对特定的ID列进行计数汇总

df_inner.groupby('city')['id'].count()

city

beijing 2

guangzhou 1

shanghai 2

shenzhen 1

Name: id, dtype: int64

在前面的基础上增加第二个列名称,分布对city和size两个字段进行计数汇总。

#对两个字段进行汇总计数

df_inner.groupby(['city','size'])['id'].count()

city size

beijing A 1

F 1

guangzhou A 1

shanghai A 1

B 1

shenzhen C 1

Name: id, dtype: int64

除了计数和求和外,还可以对汇总后的数据同时按多个维度进行计算,下面的代码中按城市对price字段进行汇总,并分别计算price的数量,总金额和平均金额。

#对city字段进行汇总并计算price的合计和均值。

df_inner.groupby('city')['price'].agg([len,np.sum, np.mean])

9979784c06cc953a617de80f2f8cc5f9.png

2. 数据透视

Excel中的插入目录下提供“数据透视表”功能对数据表按特定维度进行汇总。

a47744ad5ab0e4d7ba1ac3cf9b3a0656.png

Python中也提供了数据透视表功能。通过pivot_table函数实现同样的效果

数据透视表也是常用的一种数据分类汇总方式,并且功能上比groupby要强大一些。下面的代码中设定city为行字段,size为列字段,price为值字段。分别计算price的数量和金额并且按行与列进行汇总。

#数据透视表

pd.pivot_table(df_inner,index=["city"],values=["price"],columns=["size"],aggfunc=[len,np.sum],fill_value=0,margins=True)

c53f51268dc572c8698657ab17fa17a9.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
报错 "TypeError: 'float' object is not iterable" 是因为在某些行中,'org' 列的值是浮点数类型(float),而不是可迭代的对象。造成这个问题的原因可能是原始文件中的某些单元格为空或包含了非字符串类型的数据。 为了解决这个问题,你可以在合并之前先将 'org' 列的值转换为字符串类型。可以使用 `str()` 函数来实现这个转换。以下是修正后的代码: ```python import pandas as pd import difflib # 读取原始文件 df = pd.read_excel("C:/Users/Admin/Desktop/1000_[].xlsx") # 从第二行开始筛选数据 df = df.iloc[1:] # 检查重复行,并合并相似的行 merged_rows = [] seen_authors = set() for _, row in df.iterrows(): author = row['author'] org = str(row['org']) # 将 'org' 列的值转换为字符串类型 if author in seen_authors: for merged_row in merged_rows: if merged_row['author'] == author and difflib.SequenceMatcher(None, str(merged_row['org']), org).ratio() > 0.9: merged_row.update(row) break else: merged_rows.append(row) else: merged_rows.append(row) seen_authors.add(author) # 创建新的数据框 merged_df = pd.DataFrame(merged_rows) merged_df.to_excel("C:/Users/Admin/Desktop/1000_md.xlsx", index=False) print("合并完成并保存为1000_md.xlsx") ``` 在修正的代码中,我在合并之前使用 `str()` 函数将 'org' 列的值转换为字符串类型。这样可以避免在合并时出现TypeError。 请注意,你需要将文件的保存路径修改为你想要保存的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值