首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 140个Pandas数据分析技巧

Python 140个Pandas数据分析技巧

作者头像
用户11081884
发布2026-07-20 18:48:06
发布2026-07-20 18:48:06
730
举报

Pandas 常用于数据处理与分析,梳理了 140 个 Pandas 要点,帮助驾驭各类数据分析任务。

Pandas基础操作

1、创建DataFrame

代码语言:javascript
复制
import pandas as pd
data = {'姓名': ['张三', '李四', '王五'], '年龄': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)

2、从字典列表创建DataFrame

代码语言:javascript
复制
data = [{'姓名': '张三', '年龄': 25}, {'姓名': '李四', '年龄': 30}]
df = pd.DataFrame(data)
print(df)

3、读取CSV文件

代码语言:javascript
复制
df = pd.read_csv('data.csv', encoding='utf-8')
print(df.head())

4、读取Excel文件

代码语言:javascript
复制
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
print(df.head())

5、查看DataFrame基本信息

代码语言:javascript
复制
print(df.info())

6、查看统计信息

代码语言:javascript
复制
print(df.describe())

7、查看前N行数据

代码语言:javascript
复制
print(df.head(3))

8、查看后N行数据

代码语言:javascript
复制
print(df.tail(3))

9、查看列名

代码语言:javascript
复制
print(df.columns)

10、查看索引

代码语言:javascript
复制
print(df.index)

数据选择与过滤

11、选择单列

代码语言:javascript
复制
ages = df['年龄']
print(ages)

12、选择多列

代码语言:javascript
复制
subset = df[['姓名', '年龄']]
print(subset)

13、按行选择

代码语言:javascript
复制
row = df.iloc[1]  # 选择第二行
print(row)

14、按条件过滤

代码语言:javascript
复制
filtered = df[df['年龄'] > 30]
print(filtered)

15、多条件过滤

代码语言:javascript
复制
filtered = df[(df['年龄'] > 25) & (df['姓名'] != '张三')]
print(filtered)

16、使用isin过滤

代码语言:javascript
复制
filtered = df[df['姓名'].isin(['张三', '李四'])]
print(filtered)

17、使用query方法

代码语言:javascript
复制
filtered = df.query('年龄 > 25 and 姓名 != "张三"')
print(filtered)

18、使用loc选择行和列

代码语言:javascript
复制
subset = df.loc[0:1, ['姓名', '年龄']]
print(subset)

19、使用iloc选择行和列

代码语言:javascript
复制
subset = df.iloc[0:2, 0:2]
print(subset)

20、随机抽样

代码语言:javascript
复制
sample = df.sample(n=2)
print(sample)

数据清洗

21、处理缺失值

代码语言:javascript
复制
df.fillna(0, inplace=True)  # 用0填充缺失值

22、删除缺失值

代码语言:javascript
复制
df.dropna(inplace=True)

23、删除重复行

代码语言:javascript
复制
df.drop_duplicates(inplace=True)

4、重命名列

代码语言:javascript
复制
df.rename(columns={'姓名': 'name', '年龄': 'age'}, inplace=True)

25、删除列

代码语言:javascript
复制
df.drop(columns=['age'], inplace=True)

26、转换数据类型

代码语言:javascript
复制
df['age'] = df['age'].astype('float')

27、字符串转小写

代码语言:javascript
复制
df['name'] = df['name'].str.lower()

28、字符串去空格

代码语言:javascript
复制
df['name'] = df['name'].str.strip()

29、替换值

代码语言:javascript
复制
df['name'] = df['name'].replace('张三', '张小三')

30、应用函数转换数据

代码语言:javascript
复制
df['age'] = df['age'].apply(lambda x: x + 1)

数据操作与转换

31、添加新列

代码语言:javascript
复制
df['年龄加1'] = df['年龄'] + 1

32、条件赋值

代码语言:javascript
复制
df['年龄段'] = ['青年' if age < 30 else '中年' for age in df['年龄']]

33、分组聚合

代码语言:javascript
复制
grouped = df.groupby('年龄段')['年龄'].mean()
print(grouped)

34、多列分组聚合

代码语言:javascript
复制
grouped = df.groupby('年龄段').agg({'年龄': ['mean', 'max']})
print(grouped)

35、透视表

代码语言:javascript
复制
pivot = pd.pivot_table(df, values='年龄', index='姓名', aggfunc='mean')
print(pivot)

36、交叉表

代码语言:javascript
复制
cross = pd.crosstab(df['姓名'], df['年龄段'])
print(cross)

37、数据排序

代码语言:javascript
复制
sorted_df = df.sort_values('年龄', ascending=False)
print(sorted_df)

38、多重排序

代码语言:javascript
复制
sorted_df = df.sort_values(['年龄段', '年龄'], ascending=[True, False])
print(sorted_df)

39、数据分箱

代码语言:javascript
复制
df['年龄分组'] = pd.cut(df['年龄'], bins=[0, 30, 40, 50])
print(df)

40、虚拟变量

代码语言:javascript
复制
dummies = pd.get_dummies(df['年龄段'])
print(dummies)

数据合并与连接

41、垂直合并

代码语言:javascript
复制
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
merged = pd.concat([df1, df2])
print(merged)

42、水平合并

代码语言:javascript
复制
merged = pd.concat([df1, df2], axis=1)
print(merged)

43、内连接

代码语言:javascript
复制
left = pd.DataFrame({'key': ['A', 'B'], 'value': [1, 2]})
right = pd.DataFrame({'key': ['A', 'C'], 'value': [3, 4]})
merged = pd.merge(left, right, on='key', how='inner')
print(merged)

44、左连接

代码语言:javascript
复制
merged = pd.merge(left, right, on='key', how='left')
print(merged)

45、右连接

代码语言:javascript
复制
merged = pd.merge(left, right, on='key', how='right')
print(merged)

46、全外连接

代码语言:javascript
复制
merged = pd.merge(left, right, on='key', how='outer')
print(merged)

47、按索引合并

代码语言:javascript
复制
merged = pd.merge(left, right, left_index=True, right_index=True)
print(merged)

48、多键合并

代码语言:javascript
复制
merged = pd.merge(left, right, on=['key1', 'key2'])
print(merged)

49、追加数据

代码语言:javascript
复制
df1.append(df2, ignore_index=True)

50、合并时处理重复列名

代码语言:javascript
复制
merged = pd.merge(left, right, on='key', suffixes=('_left', '_right'))
print(merged)

时间序列处理

51、创建时间序列

代码语言:javascript
复制
dates = pd.date_range('20230101', periods=6)
df = pd.DataFrame({'date': dates, 'value': [1, 2, 3, 4, 5, 6]})

52、设置时间索引

代码语言:javascript
复制
df.set_index('date', inplace=True)

53、时间重采样

代码语言:javascript
复制
resampled = df.resample('M').mean()
print(resampled)

54、时间偏移

代码语言:javascript
复制
shifted = df.shift(1)
print(shifted)

55、时间差计算

代码语言:javascript
复制
df['diff'] = df['value'].diff()
print(df)

56、滚动窗口计算

代码语言:javascript
复制
rolling = df['value'].rolling(window=2).mean()
print(rolling)

57、扩展窗口计算

代码语言:javascript
复制
expanding = df['value'].expanding().mean()
print(expanding)

58、提取时间组件

代码语言:javascript
复制
df['year'] = df.index.year
df['month'] = df.index.month
print(df)

59、时间区间计算

代码语言:javascript
复制
periods = pd.period_range('2023-01', '2023-06', freq='M')
print(periods)

60、时区转换

代码语言:javascript
复制
df.index = df.index.tz_localize('UTC').tz_convert('Asia/Shanghai')
print(df)

数据可视化

61、折线图

代码语言:javascript
复制
df.plot.line()

62、柱状图

代码语言:javascript
复制
df.plot.bar()

63、直方图

代码语言:javascript
复制
df.plot.hist()

64、箱线图

代码语言:javascript
复制
df.plot.box()

65、散点图

代码语言:javascript
复制
df.plot.scatter(x='age', y='income')

66、饼图

代码语言:javascript
复制
df.plot.pie(y='value')

67、面积图

代码语言:javascript
复制
df.plot.area()

68、热力图

代码语言:javascript
复制
import seaborn as sns
sns.heatmap(df.corr())

69、多子图

代码语言:javascript
复制
df.plot(subplots=True, layout=(2, 2))

70、自定义样式

代码语言:javascript
复制
import matplotlib.pyplot as plt
ax = df.plot()
ax.set_title('My Plot')
ax.set_xlabel('Date')
plt.show()

高级数据处理

71、多级索引

代码语言:javascript
复制
arrays = [['A', 'A', 'B', 'B'], [1, 2, 1, 2]]
index = pd.MultiIndex.from_arrays(arrays, names=('letter', 'number'))
df = pd.DataFrame({'data': [10, 20, 30, 40]}, index=index)
print(df)

72、堆叠与解堆

代码语言:javascript
复制
stacked = df.stack()
print(stacked)
unstacked = stacked.unstack()
print(unstacked)

73、数据透视

代码语言:javascript
复制
pivoted = df.pivot(index='date', columns='category', values='value')
print(pivoted)

74、数据融合

代码语言:javascript
复制
melted = pd.melt(df, id_vars=['date'], value_vars=['A', 'B'])
print(melted)

75、分类数据

代码语言:javascript
复制
df['category'] = df['category'].astype('category')
print(df['category'].cat.categories)

76、内存优化

代码语言:javascript
复制
df = df.astype({'age': 'int8', 'income': 'float32'})
print(df.info())

77、大文件分块处理

代码语言:javascript
复制
chunks = pd.read_csv('large_file.csv', chunksize=10000)
for chunk in chunks:
    process(chunk)

78、并行处理

代码语言:javascript
复制
import swifter
df['new_col'] = df['col'].swifter.apply(lambda x: x*2)

79、自定义显示

代码语言:javascript
复制
pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', 50)

80、性能优化

代码语言:javascript
复制
%timeit df.groupby('category').mean()

文件输入输出

81、保存为CSV

代码语言:javascript
复制
df.to_csv('output.csv', index=False)

82、保存为Excel

代码语言:javascript
复制
df.to_excel('output.xlsx', sheet_name='Sheet1')

83、保存为JSON

代码语言:javascript
复制
df.to_json('output.json', orient='records')

84、保存为HTML

代码语言:javascript
复制
df.to_html('output.html')

85、保存为SQL

代码语言:javascript
复制
from sqlalchemy import create_engine
engine = create_engine('sqlite:///output.db')
df.to_sql('table_name', engine)

86、读取SQL

代码语言:javascript
复制
df = pd.read_sql('SELECT * FROM table_name', engine)

87、读取HTML表格

代码语言:javascript
复制
dfs = pd.read_html(' http://example.com/tables.html ')

88、读取剪贴板

代码语言:javascript
复制
df = pd.read_clipboard()

89、保存为Parquet

代码语言:javascript
复制
df.to_parquet('output.parquet')

90、读取Parquet

代码语言:javascript
复制
df = pd.read_parquet('output.parquet')

样式设置

91、显示所有列

代码语言:javascript
复制
pd.set_option('display.max_columns', None)

92、显示所有行

代码语言:javascript
复制
pd.set_option('display.max_rows', None)

93、设置浮点数精度

代码语言:javascript
复制
pd.set_option('display.precision', 2)

94、临时显示设置

代码语言:javascript
复制
with pd.option_context('display.max_rows', 10):
    print(df)

95、样式设置

代码语言:javascript
复制
def highlight_max(s):    is_max = s == s.max()    return ['background-color: yellow' if v else '' for v in is_max]
df.style.apply(highlight_max)

96、条件格式化

代码语言:javascript
复制
df.style.bar(color='#d65f5f')

97、链式操作

代码语言:javascript
复制
result = (df.query('age > 30')
          .groupby('gender')
          .agg({'income': 'mean'})
          .sort_values('income', ascending=False))

98、内存使用分析

代码语言:javascript
复制
print(df.memory_usage(deep=True))

99、数据类型优化

代码语言:javascript
复制
df = df.convert_dtypes()

100、性能分析

代码语言:javascript
复制
%prun df.groupby('category').mean()

数据处理

101、字符串连接

代码语言:javascript
复制
df['full_name'] = df['first_name'] + ' ' + df['last_name']

102、字符串分割

代码语言:javascript
复制
df['name_parts'] = df['full_name'].str.split(' ')

103、提取子串

代码语言:javascript
复制
df['first_letter'] = df['name'].str[0]

104、正则表达式提取

代码语言:javascript
复制
df['area_code'] = df['phone'].str.extract(r'(\d{3})')

105、正则表达式替换

代码语言:javascript
复制
df['clean_phone'] = df['phone'].str.replace(r'\D', '')

106、字符串包含检查

代码语言:javascript
复制
df['has_com'] = df['email'].str.contains('.com')

107、字符串长度

代码语言:javascript
复制
df['name_length'] = df['name'].str.len()

108、字符串填充

代码语言:javascript
复制
df['id_padded'] = df['id'].str.pad(5, fillchar='0')

109、字符串替换

代码语言:javascript
复制
df['clean_text'] = df['text'].str.replace('[^\w\s]', '')

110、词频统计

代码语言:javascript
复制
from collections import Counter
word_counts = Counter(' '.join(df['text']).split())

数据分析

111、移动平均

代码语言:javascript
复制
df['rolling_avg'] = df['value'].rolling(window=7).mean()

112、指数平滑

代码语言:javascript
复制
df['ewm'] = df['value'].ewm(span=7).mean()

113、标准化数据

代码语言:javascript
复制
df['normalized'] = (df['value'] - df['value'].mean()) / df['value'].std()

114、分位数计算

代码语言:javascript
复制
df['quantile'] = pd.qcut(df['value'], q=4, labels=False)

115、相关性分析

代码语言:javascript
复制
correlation = df.corr()

116、协方差矩阵

代码语言:javascript
复制
covariance = df.cov()

117、主成分分析

代码语言:javascript
复制
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
df_pca = pca.fit_transform(df.select_dtypes(include='number'))

118、聚类分析

代码语言:javascript
复制
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
df['cluster'] = kmeans.fit_predict(df.select_dtypes(include='number'))

119、异常值检测

代码语言:javascript
复制
df['is_outlier'] = (df['value'] - df['value'].mean()).abs() > 3 * df['value'].std()

120、时间序列分解

代码语言:javascript
复制
from statsmodels.tsa.seasonal import seasonal_decompose
result = seasonal_decompose(df['value'], model='additive', period=12)
result.plot()

性能优化

121、使用迭代器读取大文件

代码语言:javascript
复制
chunks = pd.read_csv('大文件.csv', chunksize=10000)
for chunk in chunks:
    process(chunk)

122、分类数据优化

代码语言:javascript
复制
df['类别列'] = df['类别列'].astype('category')

123、使用eval表达式

代码语言:javascript
复制
df.eval('新列 = 列1 + 列2', inplace=True)

124、使用query提高性能

代码语言:javascript
复制
df.query('年龄 > 30 & 性别 == "男"', inplace=True)

125、使用at/iat快速访问

代码语言:javascript
复制
df.at[0, '列名'] = 100  # 比loc更快

126、避免链式赋值

代码语言:javascript
复制
# 不好
df['列'][df['条件']] = 值
# 好
df.loc[df['条件'], '列'] = 值

127、使用numpy操作

代码语言:javascript
复制
import numpy as np
df['新列'] = np.log(df['数值列'])

128、避免循环

代码语言:javascript
复制
# 不好
for i in range(len(df)):
    df.at[i, '新列'] = df.at[i, '列'] * 2
# 好
df['新列'] = df['列'] * 2

129、内存使用分析

代码语言:javascript
复制
df.memory_usage(deep=True)

130、释放内存

代码语言:javascript
复制
import gc
del df
gc.collect()

自定义函数与分组

131、分组应用函数

代码语言:javascript
复制
def custom_func(group):
    return group['数值列'].mean() / group['数值列'].std()
    
df.groupby('分组列').apply(custom_func)

132、映射函数

代码语言:javascript
复制
df['等级'] = df['分数'].map(lambda x: 'A' if x > 90 else 'B' if x > 80 else 'C')

133、按行应用函数

代码语言:javascript
复制
df.apply(lambda row: row['列1'] + row['列2'], axis=1)

134、分组聚合多个函数

代码语言:javascript
复制
df.groupby('部门').agg({'销售额': ['sum', 'mean'], '利润': 'max'})

135、分组转换

代码语言:javascript
复制
df['部门平均'] = df.groupby('部门')['销售额'].transform('mean')

136、分组过滤

代码语言:javascript
复制
df.groupby('部门').filter(lambda x: x['销售额'].mean() > 1000)

137、滚动应用函数

代码语言:javascript
复制
df['滚动平均'] = df['数值列'].rolling(5).apply(lambda x: x.mean())

138、扩展应用函数

代码语言:javascript
复制
df['累计百分比'] = df['数值列'].expanding().apply(lambda x: x[-1]/x.sum())

139、分组时间重采样

代码语言:javascript
复制
df.groupby('产品').resample('W')['销售额'].sum()

140、自定义聚合器

代码语言:javascript
复制
def top_n(df, n=3, column='销售额'):
    return df.sort_values(column, ascending=False).head(n)
    
df.groupby('部门').apply(top_n)

140个Pandas技巧能够高效处理各种数据分析任务。从基本的数据操作到处理时间序列、分类数据等的高级技术。在实际数据集上尝试这些技巧,有助于巩固对Pandas及其功能的理解,在实际项目中多加练习,将这些技巧融会贯通。

“无他,惟手熟尔”!有需要的用起来。

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Pandas基础操作
    • 1、创建DataFrame
    • 2、从字典列表创建DataFrame
    • 3、读取CSV文件
    • 4、读取Excel文件
    • 5、查看DataFrame基本信息
    • 6、查看统计信息
    • 7、查看前N行数据
    • 8、查看后N行数据
    • 9、查看列名
    • 10、查看索引
  • 数据选择与过滤
    • 11、选择单列
    • 12、选择多列
    • 13、按行选择
    • 14、按条件过滤
    • 15、多条件过滤
    • 16、使用isin过滤
    • 17、使用query方法
    • 18、使用loc选择行和列
    • 19、使用iloc选择行和列
    • 20、随机抽样
  • 数据清洗
    • 21、处理缺失值
    • 22、删除缺失值
    • 23、删除重复行
    • 4、重命名列
    • 25、删除列
    • 26、转换数据类型
    • 27、字符串转小写
    • 28、字符串去空格
    • 29、替换值
    • 30、应用函数转换数据
  • 数据操作与转换
    • 31、添加新列
    • 32、条件赋值
    • 33、分组聚合
    • 34、多列分组聚合
    • 35、透视表
    • 36、交叉表
    • 37、数据排序
    • 38、多重排序
    • 39、数据分箱
    • 40、虚拟变量
  • 数据合并与连接
    • 41、垂直合并
    • 42、水平合并
    • 43、内连接
    • 44、左连接
    • 45、右连接
    • 46、全外连接
    • 47、按索引合并
    • 48、多键合并
    • 49、追加数据
    • 50、合并时处理重复列名
  • 时间序列处理
    • 51、创建时间序列
    • 52、设置时间索引
    • 53、时间重采样
    • 54、时间偏移
    • 55、时间差计算
    • 56、滚动窗口计算
    • 57、扩展窗口计算
    • 58、提取时间组件
    • 59、时间区间计算
    • 60、时区转换
  • 数据可视化
    • 61、折线图
    • 62、柱状图
    • 63、直方图
    • 64、箱线图
    • 65、散点图
    • 66、饼图
    • 67、面积图
    • 68、热力图
    • 69、多子图
    • 70、自定义样式
  • 高级数据处理
    • 71、多级索引
    • 72、堆叠与解堆
    • 73、数据透视
    • 74、数据融合
    • 75、分类数据
    • 76、内存优化
    • 77、大文件分块处理
    • 78、并行处理
    • 79、自定义显示
    • 80、性能优化
  • 文件输入输出
    • 81、保存为CSV
    • 82、保存为Excel
    • 83、保存为JSON
    • 84、保存为HTML
    • 85、保存为SQL
    • 86、读取SQL
    • 87、读取HTML表格
    • 88、读取剪贴板
    • 89、保存为Parquet
    • 90、读取Parquet
  • 样式设置
    • 91、显示所有列
    • 92、显示所有行
    • 93、设置浮点数精度
    • 94、临时显示设置
    • 95、样式设置
    • 96、条件格式化
    • 97、链式操作
    • 98、内存使用分析
    • 99、数据类型优化
    • 100、性能分析
  • 数据处理
    • 101、字符串连接
    • 102、字符串分割
    • 103、提取子串
    • 104、正则表达式提取
    • 105、正则表达式替换
    • 106、字符串包含检查
    • 107、字符串长度
    • 108、字符串填充
    • 109、字符串替换
    • 110、词频统计
  • 数据分析
    • 111、移动平均
    • 112、指数平滑
    • 113、标准化数据
    • 114、分位数计算
    • 115、相关性分析
    • 116、协方差矩阵
    • 117、主成分分析
    • 118、聚类分析
    • 119、异常值检测
    • 120、时间序列分解
  • 性能优化
  • 自定义函数与分组
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档