当前位置: 首页 > article >正文

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


http://www.kler.cn/a/414853.html

相关文章:

  • HTML CSS JS基础考试题与答案
  • 分布式搜索引擎之elasticsearch单机部署与测试
  • 【论文阅读】Federated learning backdoor attack detection with persistence diagram
  • 富文本编辑器图片上传并回显
  • 【Vue】Keep alive详解
  • C++设计模式——Singleton单例模式
  • Leetcode494. 目标和(HOT100)
  • 【已解决】git push需要输入用户名和密码问题
  • MySQL:常用数据类型
  • 【数据结构】ArrayList与顺序表
  • # 18_ Python基础到实战一飞冲天(二)-python基础(十八)--元组
  • 尚硅谷学习笔记——Java设计模式(一)设计模式七大原则
  • mac 如何查看 export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node 是否正确
  • Modern Effective C++ item 15:尽可能的使用constexpr
  • 【GIT】TortoiseGit的拉取(Pull) 和 获取(Fetch)
  • 机器学习在教育方面的应用文献综述
  • windows server 2019 启动 nginx 报错
  • 如何在AWS中部署HOOPS Communicator?Docker容器化策略!
  • 深度学习-46-大语言模型LLM之仅需一个文件llamafile部署本地大模型
  • 【C++】入门【三】
  • 无人机油气领域应用详解!
  • 2024.11.28(作业)
  • BERT的中文问答系统42
  • 基于Springboot的网上商城系统【附源码】
  • P8723 [蓝桥杯 2020 省 AB3] 乘法表
  • 02-Linux系统权限维持