夜雨聆风学习资料网

ARTICLE · 1356135

Excel处理数据太慢?这10个Pandas技巧,建议码住收藏!

Excel处理数据太慢?这10个Pandas技巧,建议码住收藏!

你有没有遇到过这样的情况:几个部门发来不同的 Excel 表格,需要逐个打开、复制、粘贴,再反复核对数据;一份表格数据量稍微大一点,筛选、统计就变得很慢;每个月都要重复做同样的报表,步骤多还容易出错。

如果这些工作经常发生,可以试试 Python 的 Pandas。它是一个常用的数据处理工具,能够帮助我们完成数据读取、清洗、筛选、合并、统计和导出等操作。把重复步骤写成代码后,下次遇到同类任务,就不用再从头手动操作。

需要说明的是,Pandas 并不是在所有情况下都比 Excel 快,也不是要完全取代 Excel。它更适合数据量较大、步骤重复、规则明确的处理任务;最终效率还会受到电脑内存、数据结构和代码写法影响。

为什么用 Pandas 处理数据?

·批量处理:适合重复读取、清洗和整理多份数据文件。

·灵活筛选:可以组合多个条件,完成比简单筛选器更复杂的规则。

·快速汇总:分组统计、数据透视和表格合并都可以用代码完成。

·方便复用:把常用步骤保存成脚本,下次只需替换数据文件或参数。

开始之前:安装 Pandas

如果电脑已经安装 Python,可以打开终端或命令提示符,执行下面这条命令:

</>

Terminal · Code

1

pip install pandas openpyxl xlsxwriter

其中,pandas 用于数据处理;openpyxl 常用于读取或写入 .xlsx 文件;xlsxwriter 可用于生成带格式的 Excel 文件。若只处理 CSV 文件,通常先安装 pandas 就可以。

下面的示例默认已经导入 Pandas,并且数据表中的字段名称与代码一致。实际使用时,请把示例里的文件名和列名替换成自己的。

10个Pandas 技巧

01|数据导入优化:读取时就设定数据类型

适用场景:读取 CSV 文件时,如果提前知道字段的数据类型,可以在导入时指定,减少不必要的类型推断和内存占用。

</>

Python · Code

1

importpandas aspd

2

3

# 读取时指定字段类型

4

dtypes ={

5

"user_id":"int32",

6

"price":"float32"

7

}

8

9

df =pd.read_csv(

10

"data.csv",

11

dtype=dtypes,

12

parse_dates=["order_time"]

13

)

怎么理解:dtype 用来指定列的数据类型;parse_dates 可以在读取时解析日期列。这样后续处理日期和数值时会更方便。

小提醒

示例中的列名必须真实存在于 CSV 文件中。int32 适用于数值范围足够小且没有缺失值的整数列;如果该列可能有缺失值,可考虑使用 Pandas 的可空类型 Int32。

02|替代 VLOOKUP:用 merge 合并表格

适用场景:订单表里只有用户编号,但你还需要补充用户姓名、地区或会员等级时,可以通过 merge 按共同字段匹配两张表。

</>

Python · Code

1

# 按用户编号,将用户信息合并到订单表

2

df_merged =pd.merge(

3

df_orders,

4

df_users,

5

how="left",

6

left_on="user_id",

7

right_on="id"

8

)

怎么理解:how='left' 表示保留左侧订单表的全部记录,再从用户表中匹配对应信息。left_on 和 right_on 分别指定两张表用于匹配的字段。

小提醒

合并前先检查两张表的匹配字段是否有重复值。右表的匹配键如果存在重复记录,一条订单可能匹配出多行结果,导致合并后的行数增加。

03|多条件筛选:一次筛出符合要求的数据

适用场景:例如,只想查看年龄大于 18 岁、城市属于北京或上海,并且手机号不为空的记录。

</>

Python · Code

1

df_filtered =df.loc[

2

(df["age"]> 18)

3

& (df["city"].isin(["北京", "上海"]))

4

& (df["phone"].notna())

5

].copy()

怎么理解:每个筛选条件都用括号括起来;& 表示同时满足,| 表示满足其中一个,~ 表示取反。isin() 可以判断某列是否属于指定列表,notna() 用来排除缺失值。

小提醒

Pandas 中多个条件组合时要使用 &、|、~,不要直接写 Python 的 and、or、not。

04|GroupBy 分组统计:快速找出每个城市的销售 Top 3

适用场景:当你需要按城市、产品汇总销售额,并找出每个城市销量或销售额排名靠前的产品时,可以先分组汇总,再排序取前几名。

</>

Python · Code

1

# 先按城市和产品汇总销售额

2

city_product =(

3

df.groupby(["city", "product"], as_index=False)["sales"]

4

.sum()

5

)

6

7

# 每个城市按销售额从高到低排序,取前 3 名

8

top3_by_city =(

9

city_product

10

.sort_values(

11

["city", "sales"],

12

ascending=[True, False]

13

)

14

.groupby("city", group_keys=False)

15

.head(3)

16

)

怎么理解:groupby() 负责分组,sum() 负责求和,sort_values() 负责排序,head(3) 则取每组前 3 条记录。几个操作组合起来,就能完成一项常见的报表任务。

小提醒

这里的 Top 3 是按 sales 销售额排序。如果你想按数量、利润或其他指标排名,只需要替换对应字段。

05|日期处理:提取年份、周数和是否周末

适用场景:分析订单、考勤或销售记录时,经常需要按年份、月份、星期或工作日/周末进行统计。

</>

Python · Code

1

# 将日期列转换为日期类型

2

df["date"]=pd.to_datetime(df["date"], errors="coerce")

3

4

# 提取年份

5

df["year"]=df["date"].dt.year

6

7

# 提取 ISO 周数

8

df["week"]=df["date"].dt.isocalendar().week

9

10

# 判断是否为周末:周一=0,周日=6

11

df["is_weekend"]=df["date"].dt.dayofweek >= 5

怎么理解:先用 pd.to_datetime() 把日期列转换为日期类型,再通过 .dt 访问器提取年份、周数和星期信息。这样就能进一步按时间维度进行汇总。

小提醒

无法识别的日期会在 errors='coerce' 时变成缺失值 NaT。处理前最好检查原始日期格式是否统一。

06|字符串处理:批量提取和查找关键词

适用场景:比如从手机号中提取前三位,或者判断营销活动名称里是否包含“优惠”两个字。

</>

Python · Code

1

# 统一转为字符串类型,再提取手机号前三位

2

df["phone"]=df["phone"].astype("string")

3

df["mobile_prefix"]=df["phone"].str[:3]

4

5

# 判断活动名称是否包含指定关键词

6

df["campaign_flag"]=(

7

df["campaign"]

8

.astype("string")

9

.str.contains("优惠", na=False)

10

)

怎么理解:str[:3] 可以批量截取字符串前三位;str.contains() 可以批量判断是否包含某个关键词。na=False 表示遇到缺失值时按 False 处理。

小提醒

如果手机号列被 Excel 读成数字,前导 0 可能已经丢失。涉及手机号、身份证号等编号字段时,建议在读取文件时就按字符串处理。

07|数据透视表:按城市和类别汇总指标

适用场景:如果你想快速查看不同城市、不同商品类别的平均销售额,可以用 pivot_table() 生成交叉汇总表。

</>

Python · Code

1

pivot =pd.pivot_table(

2

df,

3

index="city",

4

values="sales",

5

columns="category",

6

aggfunc="mean",

7

margins=True,

8

fill_value=0

9

)

怎么理解:index 指定行维度,columns 指定列维度,values 指定需要统计的数值列,aggfunc 指定统计方式。这里使用 mean 计算平均值;margins=True 会增加汇总行和汇总列。

小提醒

如果你需要总销售额,把 aggfunc='mean' 改成 aggfunc='sum';如果需要计数,可以使用 aggfunc='count'。

08|批量计算:优先使用向量化操作

适用场景:例如,整张订单表都需要按原价的 9 折计算折后价,不需要一行一行循环处理。

</>

Python · Code

1

# 推荐:一次性对整列进行计算

2

df["discount"]=df["price"]* 0.9

3

4

# 也可以按条件计算,例如价格达到 100 元才打九折

5

df["final_price"]=df["price"].where(

6

df["price"]< 100,

7

df["price"]* 0.9

8

)

怎么理解:Pandas 支持对整列进行批量运算,这类向量化写法通常比逐行使用 for 循环和 .loc 赋值更简洁,也往往更高效。

小提醒

原图将这一项写作“高效循环”,但示例中的逐行循环并不是推荐的高效写法。实际处理时,优先考虑向量化计算;确实需要逐行处理复杂逻辑时,再选择合适的迭代方式。

09|Excel 导出:保存结果并添加条件格式

适用场景:数据处理完成后,除了导出普通 Excel,还可以给超过指定数值的单元格添加颜色,方便查看重点数据。

</>

Python · Code

1

# 需要先安装:pip install xlsxwriter

2

3

withpd.ExcelWriter(

4

"report.xlsx",

5

engine="xlsxwriter"

6

)aswriter:

7

df.to_excel(

8

writer,

9

sheet_name="数据",

10

index=False

11

)

12

13

workbook =writer.book

14

worksheet =writer.sheets["数据"]

15

16

# 为 B 列中大于 1000 的数值设置红色背景

17

ifnotdf.empty:

18

format_red =workbook.add_format({

19

"bg_color":"#FFC7CE"

20

})

21

22

worksheet.conditional_format(

23

f"B2:B{len(df)+ 1}",

24

{

25

"type":"cell",

26

"criteria":">",

27

"value":1000,

28

"format":format_red

29

}

30

)

31

32

# 如果还需要导出 CSV

33

df.to_csv(

34

"report.csv",

35

index=False,

36

encoding="utf-8-sig"

37

)

怎么理解:ExcelWriter 可以把数据写入指定工作表;使用 xlsxwriter 引擎时,还能进一步设置条件格式。导出 CSV 时使用 utf-8-sig,通常更方便 Windows 版 Excel 识别中文。

小提醒

这段条件格式示例默认要标色的是 Excel 的 B 列。请根据实际表格调整列范围和判断阈值。这里明确指定 engine='xlsxwriter',因为代码使用了 xlsxwriter 的 add_format() 接口。

10|大文件处理:减少内存占用

适用场景:当 CSV 文件比较大时,可以尝试优化字段类型,并使用 chunksize 分块读取,避免一次性把整个文件读入内存。

</>

Python · Code

1

# 将数值列转换为更合适的类型

2

df["user_id"]=pd.to_numeric(

3

df["user_id"],

4

errors="coerce"

5

).astype("Int32")

6

7

# 对重复值较多的文本列,可尝试 category

8

df["description"]=df["description"].astype("category")

9

10

# 分块读取大文件,并逐块写出处理结果

11

first_chunk =True

12

13

forchunk inpd.read_csv(

14

"huge_file.csv",

15

chunksize=100_000

16

):

17

# 在这里对当前数据块进行清洗、筛选或计算

18

chunk.to_csv(

19

"processed_output.csv",

20

mode="w"iffirst_chunk else"a",

21

header=first_chunk,

22

index=False,

23

encoding="utf-8-sig"

24

)

25

first_chunk =False

怎么理解:astype() 可以调整字段类型;category 适合类别重复较多的文本列。chunksize=100_000 表示每次读取约 10 万行,处理完一块再继续读取下一块。

小提醒

仅仅把所有分块重新 concat 到一起,仍然可能占用大量内存,不能真正发挥分块读取的优势。大文件场景下,更适合逐块完成清洗、统计或写出结果。Int32 是 Pandas 可空整数类型;如果字段没有缺失值且范围合适,也可以考虑 int32。

实际使用时,记住这几个小习惯

1.先检查列名:代码中的字段名称要和 Excel / CSV 表头完全一致。

2.先用小样本测试:正式处理整份文件前,可以先读取少量数据,确认代码逻辑正确。

3.留意缺失值和重复值:合并、筛选、分组之前,先检查数据是否完整。

4.保留原始文件:尽量把处理结果另存为新文件,不要直接覆盖原始数据。

5.不要盲目追求“快”:先保证结果正确,再根据数据量和运行时间优化代码。

写在最后:

Excel 依然是日常办公中非常好用的工具,但当数据量变大、操作步骤变多,或者每个月都要重复做同一套报表时,Pandas 能帮我们把不少机械操作变成可复用的代码。

这 10 个技巧覆盖了数据导入、合并、筛选、分组、日期处理、字符串处理、透视表、批量计算、导出和大文件读取。刚开始不用一次全部记住,可以先挑一个自己工作中最常遇到的场景,照着示例跑通,再慢慢把它变成自己的小工具。

##Python #Pandas #数据分析 #自动化办公 #Excel技巧 #办公效率

#程序员

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料