公众号:尤而小屋
编辑: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=[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中许多常用的数据处理技巧。根据具体需求,你可以进一步扩展和组合这些技巧来处理和分析数据。