这99行Pandas代码,让我从Excel加班族到准时下班族
- 2026-11-12 06:45:11
这99行Pandas代码,让我从Excel加班族到准时下班族
前言
大家好,我是你们的老朋友。
在职场摸爬滚打这些年,相信很多人都和我一样,曾经是“Excel重度依赖患者”。每天不是在做表,就是在做表的路上。为了核对一个数据,反复筛选、复制粘贴,甚至为了做一个透视表熬到深夜。
直到我遇见了Pandas,我的工作效率才真正实现了质的飞跃。它就像一个不知疲倦的超级助理,能把我们从重复、机械的劳动中解放出来。
今天,我就把自己在实战中总结出的99行最常用、最实用的Pandas代码分享给大家。这不仅仅是一份代码清单,更是我从“加班族”变身“准时下班族”的秘籍。希望能帮到每一个还在为数据头疼的你!
第一部分:环境准备与数据读取(1-10行)
在开始处理数据之前,我们首先要导入工具库并把数据读进来。
1. 导入Pandas库 import pandas as pd2. 读取CSV文件 df = pd.read_csv('data.csv')3. 读取Excel文件 df = pd.read_excel('data.xlsx')4. 读取指定工作表 df = pd.read_excel('data.xlsx', sheet_name='Sheet1')5. 读取文本文件(制表符分隔) df = pd.read_table('data.txt')6. 读取时指定索引列 df = pd.read_csv('data.csv', index_col='ID')7. 读取时只读前几行(用于测试) df = pd.read_csv('data.csv', nrows=10)8. 读取时指定编码(解决乱码) df = pd.read_csv('data.csv', encoding='utf-8')9. 创建一个简单的DataFrame data = {'Name': ['Alice', 'Bob'], 'Age': [25, 30]}df = pd.DataFrame(data)10. 查看数据的前5行 print(df.head())
第二部分:数据查看与基础信息(11-20行)
拿到数据后,先别急着处理,看看它长什么样。
11. 查看数据的后5行 print(df.tail())12. 查看数据的形状(行数、列数) print(df.shape)13. 查看列名列表 print(df.columns)14. 查看索引 print(df.index)15. 查看数据的基本信息 print(df.info())16. 查看数据的描述性统计 print(df.describe())17. 查看某一列的唯一值 print(df['City'].unique())18. 查看某一列的值计数 print(df['Status'].value_counts())19. 检查是否有缺失值 print(df.isnull().sum())20. 检查数据类型 print(df.dtypes)
第三部分:数据选择与筛选(21-40行)
Excel里最常用的就是筛选和查找,在Pandas里更强大。
21. 选择单列(Series) name_series = df['Name']22. 选择多列(DataFrame) subset = df[['Name', 'Age']]23. 按位置选择(iloc) # 选择前5行,前3列df.iloc[:5, :3]24. 按标签选择(loc) # 选择索引为0-5,列为Name和Age的数据df.loc[0:5, ['Name', 'Age']]25. 根据条件筛选数据 # 筛选年龄大于25的adults = df[df['Age'] > 25]26. 多重条件筛选(与) result = df[(df['Age'] > 25) & (df['City'] == 'Beijing')]27. 多重条件筛选(或) result = df[(df['City'] == 'Beijing') | (df['City'] == 'Shanghai')]28. 使用isin方法筛选 # 筛选城市在列表中的数据cities = ['Beijing', 'Shanghai']result = df[df['City'].isin(cities)]29. 查找包含特定字符串的行 # 查找名字包含'li'的result = df[df['Name'].str.contains('li')]30. 筛选非空数据 result = df[df['Email'].notnull()]31. 筛选数值在某个范围内 result = df[df['Age'].between(20, 30)]32. 随机抽取几行数据 sample = df.sample(5)33. 按索引获取单行数据 row = df.loc[0]34. 获取某一单元格的值 value = df.at[0, 'Name']35. 获取列的最大值对应的行 max_row = df.nlargest(1, 'Age')36. 获取列的最小值对应的行 min_row = df.nsmallest(1, 'Age')37. 筛选重复行 duplicates = df[df.duplicated()]38. 根据特定列去重 df_unique = df.drop_duplicates(subset=['Email'])39. 查看数据的内存使用情况 print(df.memory_usage(deep=True))40. 设置显示所有列 pd.set_option('display.max_columns', None)
第四部分:数据清洗与处理(41-60行)
数据脏乱差?几行代码搞定它!
41. 重命名列名 df.rename(columns={'OldName': 'NewName'}, inplace=True)42. 删除某一列 df.drop('ColumnName', axis=1, inplace=True)43. 删除包含缺失值的行 df.dropna(inplace=True)44. 填充缺失值 df['Age'].fillna(df['Age'].mean(), inplace=True)45. 用前一个值填充缺失值 df.fillna(method='ffill', inplace=True)46. 更改数据类型 df['Age'] = df['Age'].astype(int)47. 将字符串列转换为时间类型 df['Date'] = pd.to_datetime(df['Date'])48. 删除字符串首尾空格 df['Name'] = df['Name'].str.strip()49. 字符串全部转为小写 df['Name'] = df['Name'].str.lower()50. 字符串全部转为大写 df['Name'] = df['Name'].str.upper()51. 替换字符串内容 df['Status'] = df['Status'].str.replace('Active', '启用')52. 提取字符串的前几位 # 提取前3位df['Prefix'] = df['Code'].str[:3]53. 按分隔符拆分列 # 将'Name'列按空格拆分为'First'和'Last'两列df[['First', 'Last']] = df['Name'].str.split(' ', expand=True)54. 合并两列字符串 df['FullName'] = df['First'] + ' ' + df['Last']55. 删除重复索引 df = df[~df.index.duplicated()]56. 重置索引 df.reset_index(drop=True, inplace=True)57. 设置某列为索引 df.set_index('ID', inplace=True)58. 创建新列并赋值 df['NewColumn'] = 059. 根据条件创建新列(apply方法) df['AgeGroup'] = df['Age'].apply(lambda x: '青年' if x < 30 else '中年')60. 映射字典值到新列 mapping = {1: '男', 2: '女'}df['Gender'] = df['SexCode'].map(mapping)
第五部分:数据计算与分析(61-80行)
这才是Pandas的杀手锏,复杂的计算一键完成。
61. 计算两列的和 df['Total'] = df['A'] + df['B']62. 计算百分比 df['Percent'] = df['Part'] / df['Total']63. 计算累计和 df['CumSum'] = df['Sales'].cumsum()64. 计算排名 df['Rank'] = df['Score'].rank()65. 计算移动平均线 df['MA_5'] = df['Price'].rolling(window=5).mean()66. 计算行的最大值 df['RowMax'] = df[['A', 'B', 'C']].max(axis=1)67. 计算行的最小值 df['RowMin'] = df[['A', 'B', 'C']].min(axis=1)68. 计算行的平均值 df['RowMean'] = df[['A', 'B', 'C']].mean(axis=1)69. 计算行的总和 df['RowSum'] = df[['A', 'B', 'C']].sum(axis=1)70. 计算两个日期的差值 df['DaysDiff'] = (df['EndDate'] - df['StartDate']).dt.days71. 提取日期中的年份 df['Year'] = df['Date'].dt.year72. 提取日期中的月份 df['Month'] = df['Date'].dt.month73. 提取日期中的星期几 df['Weekday'] = df['Date'].dt.weekday74. 判断是否为工作日 df['IsWeekend'] = df['Date'].dt.weekday >= 575. 向上取整 import numpy as npdf['Ceil'] = np.ceil(df['Value'])76. 向下取整 df['Floor'] = np.floor(df['Value'])77. 四舍五入 df['Round'] = df['Value'].round(2)78. 计算分位数 q = df['Sales'].quantile(0.95)79. 计算相关系数 corr = df['A'].corr(df['B'])80. 计算唯一值数量 unique_count = df['Category'].nunique()
第六部分:数据分组、透视与导出(81-100行)
最后一步,把处理好的数据变成漂亮的报表。
81. 按单列分组求和 group_sum = df.groupby('City')['Sales'].sum()82. 按单列分组求平均 group_mean = df.groupby('City')['Sales'].mean()83. 按多列分组 group_multi = df.groupby(['City', 'Year'])['Sales'].sum()84. 分组后统计数量 group_count = df.groupby('Status').size()85. 分组后应用多个聚合函数 result = df.groupby('City')['Sales'].agg(['sum', 'mean', 'count'])86. 重置分组后的索引 result = df.groupby('City')['Sales'].sum().reset_index()87. 创建数据透视表(类似Excel) pivot = pd.pivot_table(df, values='Sales', index='City', columns='Year', aggfunc=np.sum)88. 透视表添加总计行/列 pivot = pd.pivot_table(df, values='Sales', index='City', columns='Year', aggfunc=np.sum, margins=True)89. 两个DataFrame纵向拼接 combined = pd.concat([df1, df2], axis=0)90. 两个DataFrame横向拼接 combined = pd.concat([df1, df2], axis=1)91. 根据键合并两个表(类似VLOOKUP) merged = pd.merge(df1, df2, on='ID', how='left')92. 内连接 merged = pd.merge(df1, df2, on='ID', how='inner')93. 外连接 merged = pd.merge(df1, df2, on='ID', how='outer')94. 左连接 merged = pd.merge(df1, df2, on='ID', how='left')95. 导出为Excel文件 df.to_excel('output.xlsx', index=False)96. 导出为CSV文件 df.to_csv('output.csv', index=False, encoding='utf-8-sig')97. 导出为指定工作表 with pd.ExcelWriter('output.xlsx') as writer: df1.to_excel(writer, sheet_name='Sheet1') df2.to_excel(writer, sheet_name='Sheet2')98. 设置Excel导出不包含索引 df.to_excel('output.xlsx', index=False)99. 设置Excel导出包含索引 df.to_excel('output.xlsx', index=True)
结语
这100行代码,涵盖了从数据读取、清洗、分析到导出的全流程。它们是我工作中使用频率最高的“黄金代码”。
我知道,乍一看可能会觉得有点多,但请不要被吓倒。其实,Pandas的学习曲线并不陡峭。你可以先从最痛的点入手,比如把那个需要半小时做出来的报表,用代码变成一分钟。
刚开始,你可能只是复制粘贴这些代码,但慢慢地,你会理解它们的逻辑,甚至能自己写出更高效的代码。
别再让重复的Excel操作消耗你的热情和时间了。从今天开始,试着用代码解决一个小问题,你会发现,准时下班,其实很简单。
希望这份秘籍能真正帮到你。如果觉得有用,欢迎分享给身边还在加班的小伙伴!
祝大家都能早点下班,享受生活!
注:代码中的df代表DataFrame,即你的数据表。在实际使用时,请根据你的文件名和列名进行相应修改。
↑↑↑关注公众号获得更多精彩↑↑↑