【数据分析】一、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 中许多常用的数据处理技巧,从基本的数据读取和保存到复杂的分组、聚合和数据重塑操作。根据具体需求,可以进一步扩展和组合这些技巧来处理和分析数据。

相关推荐
hunter20620617 分钟前
用opencv生成视频流,然后用rtsp进行拉流显示
人工智能·python·opencv
Johaden2 小时前
EXCEL+Python搞定数据处理(第一部分:Python入门-第2章:开发环境)
开发语言·vscode·python·conda·excel
小虎牙^O^3 小时前
2024春秋杯密码题第一、二天WP
python·密码学
梦魇梦狸º4 小时前
mac 配置 python 环境变量
chrome·python·macos
查理零世4 小时前
算法竞赛之差分进阶——等差数列差分 python
python·算法·差分
查士丁尼·绵6 小时前
面试-字符串1
python
史嘉庆6 小时前
Pandas 数据分析(二)【股票数据】
大数据·数据分析·pandas
小兜全糖(xdqt)7 小时前
python中单例模式
开发语言·python·单例模式
Python数据分析与机器学习7 小时前
python高级加密算法AES对信息进行加密和解密
开发语言·python
noravinsc7 小时前
python md5加密
前端·javascript·python