由浅入深!100个pandas数据处理技巧

情感   2024-11-07 10:30   中国  

公众号:尤而小屋
编辑:Peter
作者:Peter

大家好,我是Peter~

Pandas 是一个强大的 Python 数据分析库,它提供了非常灵活和高效的方式来处理时间序列数据。

在Pandas中,有许多强大的数据处理技巧可以帮助你高效地分析和操作数据。以下是100个Pandas数据处理技巧的简要介绍和相应的Python代码示例。每个示例都会尽量简洁,由浅入深,希望对大家有所帮助。觉得不错的话,欢迎点赞、收藏、转发~

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=[010203040], 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中许多常用的数据处理技巧。根据具体需求,你可以进一步扩展和组合这些技巧来处理和分析数据。

尤而小屋
尤而小屋,一个温馨且有爱的小屋🏡 小屋主人,一手代码谋求生存,一手掌勺享受生活,欢迎你的光临~
 最新文章