核心点:50个核心Pandas操作!
哈喽,我是cos大壮~
上次分享过关于numpy的相关内容,大家反馈很受用,日常用到的某些操作,翻出来查一下就可以了,非常非常的方便。
那咱们今天把它的好兄弟,pandas的内容分享一拨。
先把pandas的官网给出来,有找不到的问题,直接官网查找:https://pandas.pydata.org/
首先给出一个示例数据,是一些用户的账号信息,基于这些数据,咱们今天给出最常用,最重要的50个案例。
ID | Name | Age | Salary | Status |
---|---|---|---|---|
101 | Alice | 25 | 50000 | Active |
102 | Bob | 30 | 60000 | Inactive |
103 | Charlie | 22 | 45000 | Active |
104 | David | 35 | 75000 | Active |
105 | Eva | 28 | 55000 | Inactive |
每个案例包括使用方式、示例、以及一段Python代码。
老规矩:大家伙如果觉得近期文章还不错!欢迎大家点个赞、转个发~
规则照旧,文末获取PDF版本,那咱们开始吧~
50个超强Pandas操作
1. 创建DataFrame
使用字典创建DataFrame
import pandas as pd
data = {'ID': [101, 102, 103, 104, 105],
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [25, 30, 22, 35, 28],
'Salary': [50000, 60000, 45000, 75000, 55000],
'Status': ['Active', 'Inactive', 'Active', 'Active', 'Inactive']}
df = pd.DataFrame(data)
2. 查看数据前几行
df.head()
使用方式: 用于查看DataFrame的前几行,默认为前5行。
示例: 查看前3行数据。
df.head(3)
3. 查看数据后几行
df.tail()
使用方式: 用于查看DataFrame的后几行,默认为后5行。
示例: 查看后3行数据。
df.tail(3)
4. 查看数据基本信息
df.info()
使用方式: 提供DataFrame的基本信息,包括每列的非空值数量和数据类型。
示例: 查看数据信息。
df.info()
5. 描述性统计信息
df.describe()
使用方式: 提供DataFrame的描述性统计信息,包括均值、标准差、最小值、25%分位数、中位数(50%分位数)、75%分位数和最大值。
示例: 查看数值列的统计信息。
df.describe()
6. 选择列
df['ColumnName']
使用方式: 通过列名选择DataFrame中的一列。
示例: 选择“Salary”列。
df['Salary']
7. 选择多列
df[['Column1', 'Column2']]
使用方式: 通过列名列表选择DataFrame中的多列。
示例: 选择“Name”和“Age”列。
df[['Name', 'Age']]
8. 选择行
df.loc[index]
使用方式: 通过索引标签选择DataFrame中的一行。
示例: 选择索引为2的行。
df.loc[2]
9. 选择特定行和列
df.loc[index, 'ColumnName']
使用方式: 通过索引标签和列名选择DataFrame中的特定元素。
示例: 选择索引为1的行的“Name”列的值。
df.loc[1, 'Name']
10. 条件选择(Filtering)
df[df['ColumnName'] > value]
使用方式: 使用条件过滤选择满足特定条件的行。
示例: 选择年龄大于25的行。
df[df['Age'] > 25]
11. 多条件选择
df[(df['Column1'] > value1) & (df['Column2'] == value2)]
使用方式: 使用逻辑运算符(&:与,|:或,~:非)结合多个条件进行过滤。
示例: 选择年龄大于25且状态为“Active”的行。
df[(df['Age'] > 25) & (df['Status'] == 'Active')]
12. 排序数据
df.sort_values(by='ColumnName', ascending=False)
使用方式: 根据指定列的值进行升序或降序排序。
示例: 按工资降序排序。
df.sort_values(by='Salary', ascending=False)
13. 处理缺失值
df.dropna()
使用方式: 删除包含缺失值的行。
示例: 删除所有包含缺失值的行。
df.dropna()
14. 填充缺失值
df.fillna(value)
使用方式: 用指定值填充缺失值。
示例: 用均值填充所有缺失值。
df.fillna(df.mean())
15. 新增列
df['NewColumn'] = values
使用方式: 新增一列,并为其赋值。
示例: 新增一列表示年龄是否大于30。
df['IsAbove30'] = df['Age'] > 30
16. 删除列
df.drop('ColumnName', axis=1)
使用方式: 删除指定列。
示例: 删除“Status”列。
df.drop('Status', axis=1)
17. 重命名列
df.rename(columns={'OldName': 'NewName'}, inplace=True)
使用方式: 重命名指定列。
示例: 将“ID”列重命名为“EmployeeID”。
df.rename(columns={'ID': 'EmployeeID'}, inplace=True)
18. 分组统计
df.groupby('ColumnName').agg({'Column1': 'mean', 'Column2': 'sum'})
使用方式: 按照指定列进行分组,然后进行聚合统计。
示例: 按状态分组,计算平均年龄和总工资。
df.groupby('Status').agg({'Age': 'mean', 'Salary': 'sum'})
19. 合并DataFrame
pd.concat([df1, df2], axis=0)
使用方式: 沿着指定轴合并两个DataFrame。
示例: 垂直合并两个DataFrame。
pd.concat([df1, df2], axis=0)
20. 横向合并DataFrame
pd.concat([df1, df2], axis=1)
使用方式: 沿着列方向合并两个DataFrame。
示例: 横向合并两个DataFrame。
pd.concat([df1, df2], axis=1)
21. 合并DataFrame(基于键)
pd.merge(df1, df2, on='KeyColumn', how='inner')
使用方式: 使用指定列进行合并,指定合并方式(内连接、左连接、右连接、外连接)。
示例: 使用“ID”列内连接两个DataFrame。
pd.merge(df1, df2, on='ID', how='inner')
22. 透视表
pd.pivot_table(df, values='ValueColumn', index='IndexColumn', columns='ColumnToPivot', aggfunc='mean')
使用方式: 创建透视表,汇总数据。
示例: 创建一个透视表,计算不同状态下的平均工资。
pd.pivot_table(df, values='Salary', index='Status', aggfunc='mean')
23. 独热编码
pd.get_dummies(df, columns=['CategoricalColumn'])
使用方式: 将分类变量转换为独热编码。
示例: 对“Status”列进行独热编码。
pd.get_dummies(df, columns=['Status'])
24. 字符串处理
df['StringColumn'].str.method()
使用方式: 对字符串列进行各种处理,如切片、替换等。
示例: 将“Name”列转换为大写。
df['Name'].str.upper()
25. 日期时间处理
df['DateTimeColumn'] = pd.to_datetime(df['DateTimeColumn'])
重点说明: 将字符串列转换为日期时间类型。 示例: 将“Date”列转换为日期时间类型。
df['Date'] = pd.to_datetime(df['Date'])
26. 时间序列重采样
df.resample('D').sum()
使用方式: 对时间序列数据进行重新采样。
示例: 将数据按天重新采样并求和。
df.resample('D').sum()
27. 滑动窗口
df['Column'].rolling(window=size).mean()
使用方式: 计算滑动窗口的统计量,如均值。
示例: 计算“Salary”列的3天滑动平均值。
df['Salary'].rolling(window=3).mean()
28. 绘制图表
df.plot(x='Column1', y='Column2', kind='scatter')
使用方式: 使用内置的绘图功能绘制各种图表。
示例: 绘制散点图。
df.plot(x='Age', y='Salary', kind='scatter')
29. 保存DataFrame到文件
df.to_csv('filename.csv', index=False)
使用方式: 将DataFrame保存为CSV文件。
示例: 将DataFrame保存为CSV文件。
df.to_csv('employee_data.csv', index=False)
30. 从文件加载数据到DataFrame
df = pd.read_csv('filename.csv')
使用方式: 从文件中加载数据到DataFrame。
示例: 从CSV文件加载数据。
df = pd.read_csv('employee_data.csv')
31. 使用apply
函数对列进行操作
df['NewColumn'] = df['Column'].apply(lambda x: x * 2)
使用方式: 使用apply
函数对某列的每个元素进行操作,可传递自定义函数。
示例: 将“Age”列的每个元素乘以2。
df['DoubleAge'] = df['Age'].apply(lambda x: x * 2)
32. 使用map
函数进行值替换
df['Status'] = df['Status'].map({'Active': 1, 'Inactive': 0})
使用方式: 使用map
函数根据字典或函数替换列中的值。
示例: 将“Status”列的值映射为1和0。
df['Status'] = df['Status'].map({'Active': 1, 'Inactive': 0})
33. 使用cut
函数进行分箱处理
df['AgeGroup'] = pd.cut(df['Age'], bins=[20, 30, 40, 50], labels=['20-30', '30-40', '40-50'])
使用方式: 使用cut
函数将数值列分成不同的箱子,用标签表示。
示例: 将“Age”列分成年龄组。
df['AgeGroup'] = pd.cut(df['Age'], bins=[20, 30, 40, 50], labels=['20-30', '30-40', '40-50'])
34. 使用groupby
和transform
进行组内操作
df['MeanSalaryByAge'] = df.groupby('Age')['Salary'].transform('mean')
使用方式: 使用groupby
和transform
在组内进行操作,并将结果广播到原始DataFrame。
示例: 计算每个年龄组的平均工资。
df['MeanSalaryByAge'] = df.groupby('Age')['Salary'].transform('mean')
35. 使用astype
进行数据类型转换
df['NewColumn'] = df['Column'].astype(float)
使用方式: 使用astype
将列的数据类型转换为指定类型。
示例: 将“Age”列转换为浮点数类型。
df['Age'] = df['Age'].astype(float)
36. 使用isin
进行过滤
df[df['Column'].isin(['value1', 'value2'])]
使用方式: 使用isin
过滤包含在给定列表中的值的行。
示例: 选择“Name”列包含特定值的行。
df[df['Name'].isin(['Alice', 'Bob'])]
37. 使用duplicated
和drop_duplicates
处理重复值
df.duplicated(subset=['Column1', 'Column2'])
df.drop_duplicates(subset=['Column1', 'Column2'], keep='first')
使用方式: 使用duplicated
检测重复值,使用drop_duplicates
删除重复值。
示例: 查找并删除重复行。
df.duplicated(subset=['Name'])
df.drop_duplicates(subset=['Name'], keep='first')
38. 使用nlargest
和nsmallest
获取最大和最小值
df.nlargest(5, 'ColumnName')
df.nsmallest(5, 'ColumnName')
使用方式: 使用nlargest
获取最大值,使用nsmallest
获取最小值。
示例: 获取工资最高的前5名和最低的前5名员工。
df.nlargest(5, 'Salary')
df.nsmallest(5, 'Salary')
39. 使用value_counts
计算唯一值的频率
df['Column'].value_counts()
使用方式: 使用value_counts
计算某列中每个唯一值的频率。
示例: 计算“Status”列中每个状态的数量。
df['Status'].value_counts()
40. 使用str.contains
进行模糊匹配
df[df['Column'].str.contains('pattern', case=False, na=False)]
使用方式: 使用str.contains
进行模糊匹配,可指定大小写敏感和处理缺失值。
示例: 选择“Name”列包含字母“A”的行。
df[df['Name'].str.contains('A', case=False, na=False)]
41. 使用replace
进行值替换
df.replace({'OldValue': 'NewValue'})
使用方式: 使用replace
替换DataFrame中的值。
示例: 将“Status”列中的“Active”替换为“ActiveStatus”。
df.replace({'Active': 'ActiveStatus'})
42. 使用pivot
进行数据透视
df.pivot(index='IndexColumn', columns='ColumnToPivot', values='ValueColumn')
使用方式: 使用pivot
进行数据透视。
示例: 创建一个数据透视表。
df.pivot(index='ID', columns='Status', values='Salary')
43. 使用merge
时处理重复列名
pd.merge(df1, df2, left_on='LeftColumn', right_on='RightColumn', suffixes=('_left', '_right'))
使用方式: 在使用merge
时,处理两个DataFrame中相同列名的情况。
示例: 合并两个DataFrame,处理重复列名。
pd.merge(df1, df2, left_on='ID', right_on='ID', suffixes=('_left', '_right'))
44. 使用at
和iat
快速访问元素
df.at[index, 'ColumnName']
df.iat[index, columnIndex]
使用方式: 使用at
和iat
快速访问DataFrame中的元素。
示例: 获取第2行的“Name”列的值。
df.at[1, 'Name']
45. 使用mask
进行条件替换
df['NewColumn'] = df['Column'].mask(df['Condition'])
使用方式: 使用mask
根据条件替换值。
示例: 根据“Salary”列的条件进行替换。
df['Bonus'] = df['Salary'].mask(df['Salary'] > 60000, 'HighBonus')
46. 使用query
进行条件查询
df.query('Column > value')
使用方式: 使用query
进行条件查询。
示例: 查询“Age”大于25的行。
df.query('Age > 25')
47. 使用crosstab
进行交叉表
pd.crosstab(df['Column1'], df['Column2'])
使用方式: 使用crosstab
生成交叉表。
示例: 生成“Status”和“Age”之间的交叉表。
pd.crosstab(df['Status'], df['Age'])
48. 使用explode
展开列表
df.explode('ListColumn')
使用方式: 使用explode
展开包含列表的列。
示例: 展开“Hobbies”列的列表。
df.explode('Hobbies')
49. 使用agg
进行多个聚合操作
df.groupby('GroupColumn').agg({'Column1': 'mean', 'Column2': ['min', 'max']})
使用方式: 使用agg
同时进行多个聚合操作。
示例: 计算每个组的平均值、最小值和最大值。
df.groupby('Status').agg({'Salary': ['mean', 'min', 'max']})
50. 使用pipe
进行链式操作
df.pipe(func1).pipe(func2, arg1='value').pipe(func3)
使用方式: 使用pipe
进行链式操作,将多个操作组合在一起。
示例: 使用pipe
调用多个自定义函数。
df.pipe(func1).pipe(func2, arg1='value').pipe(func3)
好了,这就是今天分享的全部内容。
对于初学者,我建议可以花几个小时甚至再长点时间,一个一个的过一下,有一个整体的理解。
之后在实际的使用中,就会方便很多。
对于老coder,应该扫一眼就ok了。
最后
喜欢本文的朋友可以收藏、点赞、转发起来! 需要本文PDF的同学,扫码备注「Pandas」即可~ 关注本号,带来更多算法干货实例,提升工作学习效率! 最后,给大家准备了《机器学习学习小册》PDF版本,16大块的内容,124个问题总结! 推荐阅读
原创、超强、精华合集 100个超强机器学习算法模型汇总 机器学习全路线 机器学习各个算法的优缺点 7大方面,30个最强数据集 6大部分,20 个机器学习算法全面汇总 铁汁,都到这了,别忘记点赞呀~