这99行Pandas代码,让我从Excel加班族到准时下班族
前言
大家好,我是你们的老朋友。
在职场摸爬滚打这些年,相信很多人都和我一样,曾经是“Excel重度依赖患者”。每天不是在做表,就是在做表的路上。为了核对一个数据,反复筛选、复制粘贴,甚至为了做一个透视表熬到深夜。
直到我遇见了Pandas,我的工作效率才真正实现了质的飞跃。它就像一个不知疲倦的超级助理,能把我们从重复、机械的劳动中解放出来。
今天,我就把自己在实战中总结出的99行最常用、最实用的Pandas代码分享给大家。这不仅仅是一份代码清单,更是我从“加班族”变身“准时下班族”的秘籍。希望能帮到每一个还在为数据头疼的你!
第一部分:环境准备与数据读取(1-10行)
在开始处理数据之前,我们首先要导入工具库并把数据读进来。
- 1. 导入Pandas库
import pandas as pd
- 2. 读取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)
- 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'] = 0
- 59. 根据条件创建新列(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.days
- 71. 提取日期中的年份
df['Year'] = df['Date'].dt.year
- 72. 提取日期中的月份
df['Month'] = df['Date'].dt.month
- 73. 提取日期中的星期几
df['Weekday'] = df['Date'].dt.weekday
- 74. 判断是否为工作日
df['IsWeekend'] = df['Date'].dt.weekday >= 5
- 75. 向上取整
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,即你的数据表。在实际使用时,请根据你的文件名和列名进行相应修改。
HouanSoftware套件介绍
HouanSoftware套件之应用程序使用说明
HouanSoftware套件之AutoCAD插件使用说明
↑↑↑关注公众号获得更多精彩↑↑↑