【数据分析】一、pandas数据处理指南:100个基于pandas数据预处理方法

Pandas 是一个强大的 Python 数据处理库,广泛用于数据清洗、分析和可视化。以下是一些常见的 Pandas 数据处理操作,涵盖了从数据读取到导出的各个步骤。

本文主要介绍了Pandas库的基本用法,包括读取和保存CSV文件、查看数据基本信息、选择和操作数据列与行、处理缺失值、数据类型转换、排序、去重、设置索引、合并数据框、分组和聚合操作、字符串和时间序列处理、布尔索引、自定义函数应用、数据标准化和归一化、计算相关系数和协方差矩阵、数据框切片和条件筛选、数据透视和重塑、数据分块读写、数据压缩与解压缩、导出数据到多种格式等。这些技巧覆盖了数据处理的各个方面,适用于各种数据分析任务。

1. 导入Pandas库

复制代码
import pandas as pd

2. 读取CSV文件

复制代码
df = pd.read_csv('data.csv')

3. 查看数据前几行

复制代码
df.head()

4. 查看数据列信息

复制代码
df.columns

5. 查看数据基本信息

复制代码
df.info()

6. 查看数据描述统计信息

复制代码
df.describe()

7. 选择单列

复制代码
df['column_name']

8. 选择多列

复制代码
df[['column1', 'column2']]

9. 添加新列

复制代码
df['new_column'] = df['column1'] + df['column2']

10. 删除列

复制代码
df.drop('column_name', axis=1, inplace=True)

11. 选择行(基于索引)

复制代码
df.loc[0]

12. 选择行(基于条件)

复制代码
df[df['column_name'] > 10]

13. 更改列名

复制代码
df.rename(columns={'old_name': 'new_name'}, inplace=True)

14. 删除行

复制代码
df.drop(index=0, inplace=True)

15. 检查是否有缺失值

复制代码
df.isnull().sum()

16. 删除缺失值

复制代码
df.dropna(inplace=True)

17. 填充缺失值

复制代码
df.fillna(0, inplace=True)

18. 替换值

复制代码
df.replace(to_replace=10, value=20, inplace=True)

19. 数据类型转换

复制代码
df['column_name'] = df['column_name'].astype('float')

20. 排序数据

复制代码
df.sort_values(by='column_name', inplace=True)

21. 去重

复制代码
df.drop_duplicates(inplace=True)

22. 设置索引

复制代码
df.set_index('column_name', inplace=True)

23. 重置索引

复制代码
df.reset_index(inplace=True)

24. 合并数据框(内连接)

复制代码
pd.merge(df1, df2, on='common_column')

25. 合并数据框(左连接)

复制代码
pd.merge(df1, df2, on='common_column', how='left')

26. 合并数据框(右连接)

复制代码
pd.merge(df1, df2, on='common_column', how='right')

27. 合并数据框(外连接)

复制代码
pd.merge(df1, df2, on='common_column', how='outer')

28. 连接数据框(行)

复制代码
pd.concat([df1, df2], axis=0)

29. 连接数据框(列)

复制代码
pd.concat([df1, df2], axis=1)

30. 分组操作

复制代码
df.groupby('column_name').sum()

31. 聚合操作

复制代码
df.groupby('column_name').agg({'column1': 'sum', 'column2': 'mean'})

32. 过滤分组

复制代码
df.groupby('column_name').filter(lambda x: len(x) > 1)

33. 转换分组

复制代码
df.groupby('column_name').transform(lambda x: x.max() - x.min())

34. 透视表

复制代码
pd.pivot_table(df, values='value_column', index='index_column', columns='column_to_pivot', aggfunc='sum')

35. 交叉表

复制代码
pd.crosstab(df['row_column'], df['col_column'])

36. 滚动窗口操作

复制代码
df['column_name'].rolling(window=3).mean()

37. 扩大窗口操作

复制代码
df['column_name'].expanding().mean()

38. 时间序列重采样

复制代码
df.set_index('date_column').resample('M').sum()

39. 时间序列向前填充

复制代码
df['date_column'].ffill()

40. 时间序列向后填充

复制代码
df['date_column'].bfill()

41. 时间序列差分化

复制代码
df['column_name'].diff()

42. 时间序列百分比变化

复制代码
df['column_name'].pct_change()

43. 字符串操作(转换为大写)

复制代码
df['string_column'] = df['string_column'].str.upper()

44. 字符串操作(提取子字符串)

复制代码
df['string_column'] = df['string_column'].str[:3]

45. 字符串操作(替换子字符串)

复制代码
df['string_column'] = df['string_column'].str.replace('old_string', 'new_string')

46. 字符串操作(检测模式)

复制代码
df['string_column'].str.contains('pattern')

47. 字符串操作(分割字符串)

复制代码
df[['part1', 'part2']] = df['string_column'].str.split('delimiter', expand=True)

48. 字符串操作(获取长度)

复制代码
df['string_length'] = df['string_column'].str.len()

49. 布尔索引(单条件)

复制代码
df[df['column_name'] > 10]

50. 布尔索引(多条件)

复制代码
df[(df['column1'] > 10) & (df['column2'] < 20)]

51. 自定义函数应用

复制代码
df['new_column'] = df['column_name'].apply(lambda x: x**2)

52. 自定义函数应用(多列)

复制代码
df['new_column'] = df.apply(lambda row: row['column1'] + row['column2'], axis=1)

53. 数值型数据四舍五入

复制代码
df['column_name'] = df['column_name'].round(2)

54. 数值型数据向上取整

复制代码
df['column_name'] = df['column_name'].ceil()

55. 数值型数据向下取整

复制代码
df['column_name'] = df['column_name'].floor()

56. 数值型数据截断小数部分

复制代码
df['column_name'] = df['column_name'].astype(int)

57. 数据标准化(Z-score)

复制代码
from scipy.stats import zscore
df['standardized_column'] = zscore(df['column_name'])

58. 数据归一化(Min-Max)

复制代码
df['normalized_column'] = (df['column_name'] - df['column_name'].min()) / (df['column_name'].max() - df['column_name'].min())

59. 计算相关系数矩阵

复制代码
df.corr()

60. 计算协方差矩阵

复制代码
df.cov()

61. 数据框切片

复制代码
df.loc[0:10, 'column1':'column3']

62. 数据框条件切片(基于单个条件)

复制代码
# 基于单列条件的切片
df[df['age'] > 30]
# 基于字符串条件的切片
df[df['city'].str.startswith('New')]

63. 数据框条件切片(基于多个条件)

复制代码
# 基于多列条件的切片
df[(df['age'] > 30) & (df['city'] == 'Chicago')]
# 基于数值范围条件的切片
df[(df['age'] >= 25) & (df['age'] <= 45)]
# 基于日期条件的切片
start_date = '2023-02-01'
end_date = '2023-04-01'
df[(df['date'] >= start_date) & (df['date'] <= end_date)]
# 带有loc函数
df.loc[(df['column1'] > 10) & (df['column2'] < 20), 'column3':'column5']

64. 使用query方法进行条件筛选

复制代码
df.query('column1 > 10 and column2 < 20')

65. 数据框值计数

复制代码
df['column_name'].value_counts()

66. 数据框值频率

复制代码
df['column_name'].value_counts(normalize=True)

67. 数据框唯一值

复制代码
df['column_name'].unique()

68. 数据框唯一值计数

复制代码
df['column_name'].nunique()

69. 数据框样本抽取(无放回)

复制代码
df.sample(n=5)

70. 数据框样本抽取(有放回)

复制代码
df.sample(n=5, replace=True)

71. 数据框随机打乱

复制代码
df.sample(frac=1).reset_index(drop=True)

72. 数据框按列值排序(降序)

复制代码
df.sort_values(by='column_name', ascending=False, inplace=True)

73. 数据框按多列值排序

复制代码
df.sort_values(by=['column1', 'column2'], inplace=True)

74. 数据框按索引排序

复制代码
df.sort_index(inplace=True)

75. 数据框按等级排序

复制代码
df['ranked_column'] = pd.qcut(df['column_name'], q=4, labels=False)
df.sort_values(by='ranked_column', inplace=True)

76. 数据框等级划分

复制代码
pd.qcut(df['column_name'], q=4, labels=['low', 'medium_low', 'medium_high', 'high'])

77. 数据框等级划分(自定义区间)

复制代码
pd.cut(df['column_name'], bins=[0, 10, 20, 30, 40], labels=['low', 'medium', 'high', 'very_high'])

78. 数据框数据透视

复制代码
pd.pivot(df, index='index_column', columns='column_to_pivot', values='value_column')

79. 数据框数据透视(多重索引)

复制代码
pd.pivot_table(df, values='value_column', index=['index_column1', 'index_column2'], columns='column_to_pivot', aggfunc='sum')

80. 数据框数据重塑(宽格式转长格式)

复制代码
df.melt(id_vars=['id_column'], var_name='variable', value_name='value')

81. 数据框数据重塑(长格式转宽格式)

复制代码
df.pivot(index='id_column', columns='variable', values='value')

82. 数据框数据合并(按索引)

复制代码
pd.concat([df1, df2], join='inner', axis=0)

83. 数据框数据合并(按列)

复制代码
pd.concat([df1, df2], join='outer', axis=1)

84. 数据框数据合并(忽略索引)

复制代码
pd.concat([df1, df2], ignore_index=True)

85. 数据框数据合并(带有键)

复制代码
keys = ['df1', 'df2']
df_combined = pd.concat([df1, df2], keys=keys, names=['source', 'index'])

86. 数据框数据合并(分层列)

复制代码
df1.columns = pd.MultiIndex.from_tuples([('A', 'x'), ('A', 'y')])
df2.columns = pd.MultiIndex.from_tuples([('B', 'x'), ('B', 'y')])
pd.concat([df1, df2], axis=1)

87. 数据框数据合并(追加行)

复制代码
df.append(pd.DataFrame({'column1': [value1], 'column2': [value2]}), ignore_index=True)

88. 数据框数据合并(追加列)

虽然通常不使用append来追加列,但可以通过重新分配列来实现:

复制代码
df['new_column'] = [value1, value2, ...]

或者,如果新数据在另一个数据框中:

复制代码
df = pd.concat([df, df_new_columns], axis=1)

(注意:df_new_columns应只包含要添加的列)

89. 数据框数据分块读取(大文件)

复制代码
chunk_iter = pd.read_csv('large_file.csv', chunksize=1000)
for chunk in chunk_iter:
    # 处理每个块
    process(chunk)

90. 数据框数据分块写入(大文件)

复制代码
with pd.ExcelWriter('large_file.xlsx', engine='xlsxwriter') as writer:
    for chunk in chunk_iter:
        chunk.to_excel(writer, sheet_name='Sheet1', startrow=writer.book.sheets['Sheet1'].max_row, index=False)

(注意:这里chunk_iter是数据块的迭代器)

91. 数据框数据压缩与解压缩

压缩:

复制代码
df.to_csv('compressed_file.csv.gz', compression='gzip')

解压缩:

复制代码
df = pd.read_csv('compressed_file.csv.gz', compression='gzip')

92. 数据框数据导出到Excel(多个工作表)

复制代码
with pd.ExcelWriter('multiple_sheets.xlsx') as writer:
    df1.to_excel(writer, sheet_name='Sheet1')
    df2.to_excel(writer, sheet_name='Sheet2')

93. 数据框数据导出到SQL数据库

复制代码
from sqlalchemy import create_engine
engine = create_engine('sqlite:///database.db')
df.to_sql('table_name', con=engine, if_exists='replace', index=False)

94. 从SQL数据库读取数据到数据框

复制代码
df = pd.read_sql('SELECT * FROM table_name', con=engine)

95. 数据框数据导出到HTML

复制代码
df.to_html('output.html')

或者嵌入到Jupyter Notebook中:

复制代码
df.to_html()

96. 数据框数据导出到Markdown

复制代码
df.to_markdown('output.md')

97. 数据框数据导出到JSON

复制代码
df.to_json('output.json', orient='records', lines=True)

98. 从JSON文件读取数据到数据框

复制代码
df = pd.read_json('input.json', orient='records', lines=True)

99. 数据框数据导出到CSV(带有分隔符)

复制代码
df.to_csv('output.csv', sep=';')

100. 从CSV文件读取数据到数据框(带有分隔符)

复制代码
df = pd.read_csv('input.csv', sep=';')

这些示例涵盖了 Pandas 中许多常用的数据处理技巧,从基本的数据读取和保存到复杂的分组、聚合和数据重塑操作。根据具体需求,可以进一步扩展和组合这些技巧来处理和分析数据。

相关推荐
史迪仔01122 分钟前
Python生成器:高效处理大数据的秘密武器
前端·数据库·python
reasonsummer5 小时前
【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最大化、最小化Vs界面
开发语言·python
Doker 多克5 小时前
Python-Django系列—日志
python·日志
苏三福6 小时前
ros2 hunmle bag 数据包转为图片数据 python版
开发语言·python·ros2humble
思通数据7 小时前
AI全域智能监控系统重构商业清洁管理范式——从被动响应到主动预防的监控效能革命
大数据·人工智能·目标检测·机器学习·计算机视觉·数据挖掘·ocr
大神薯条老师7 小时前
Python零基础入门到高手8.4节: 元组与列表的区别
开发语言·爬虫·python·深度学习·机器学习·数据分析
z人间防沉迷k7 小时前
堆(Heap)
开发语言·数据结构·笔记·python·算法
小白学大数据7 小时前
Python爬虫如何应对网站的反爬加密策略?
开发语言·爬虫·python
Eric.Lee20218 小时前
Ubuntu shell指定conda的python环境启动脚本
python·ubuntu·conda·shell
lilye668 小时前
精益数据分析(55/126):双边市场模式的挑战、策略与创业阶段关联
大数据·人工智能·数据分析