50个超强的Pandas操作 !!

简介: 50个超强的Pandas操作 !!

前言

首先给出一个示例数据,是一些用户的账号信息,基于这些数据,这里给出最常用,最重要的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代码。


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.desrcibe()

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'])

独热编码:(One-Hot Encoding),也叫一位有效编码,是用来表示离散变量(categorical data)的一种方法。在机器学习和深度学习中经常会使用独热编码来将离散变量转换为多维向量,以便于算法处理。将离散型的特征数据映射到一个高维空间中,每个可能的取值都对应于高维空间的一个点,在这些点上取值为1,其余均为0,因此独热编码也被称为“一位有效编码”或“One-of-K encoding”)

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')

使用方式: 使用groupbytransform在组内进行操作,并将结果广播到原始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]

使用方式: 使用atiat快速访问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)

来源:深夜努力写Python  作者:cos大壮

目录
相关文章
|
数据可视化 数据挖掘 Python
超强图解 Pandas 18 招!
超强图解 Pandas 18 招!
140 4
|
数据处理 Python
数据科学进阶之路:Pandas与NumPy高级操作详解与实战演练
【7月更文挑战第13天】探索数据科学:Pandas与NumPy提升效率的高级技巧** - Pandas的`query`, `loc`和`groupby`用于复杂筛选和分组聚合,例如筛选2023年销售额超1000的记录并按类别计总销售额。 - NumPy的广播和向量化运算加速大规模数据处理,如快速计算两个大数组的元素级乘积。 - Pandas DataFrame基于NumPy,二者协同加速数据处理,如将DataFrame列转换为NumPy数组进行标准化再回写,避免链式赋值。 掌握这些高级操作,实现数据科学项目的效率飞跃。
378 0
|
数据挖掘 数据处理 索引
Python 应知应会的Pandas高级操作
Python 应知应会的Pandas高级操作
312 0
|
Python
如何使用Python的Pandas库进行数据透视图(melt/cast)操作?
Pandas的`melt()`和`pivot()`函数用于数据透视。基本步骤:导入pandas,创建DataFrame,然后使用这两个函数变换数据。示例代码:导入pandas,定义一个包含'Name'和'Age'列的DataFrame,使用`melt()`转为长格式,再用`pivot()`恢复为宽格式。
493 1
|
索引 Python
使用Python的Pandas库进行数据透视表(pivot table)操作
使用Python Pandas进行数据透视表操作包括:安装Pandas库,导入库,创建或读取数据,如`pd.DataFrame()`或从文件读取;然后使用`pd.pivot_table()`创建透视表,指定数据框、行索引、列索引和值,例如按姓名和科目分组计算平均分;查看结果通过打印数据透视表;最后可使用`to_csv()`等方法保存到文件。这为基础步骤,可按需求调整参数实现更多功能。
895 2
|
索引 Python
如何使用Python的Pandas库进行数据透视表(pivot table)操作?
使用Pandas在Python中创建数据透视表的步骤包括:安装Pandas库,导入它,创建或读取数据(如DataFrame),使用`pd.pivot_table()`指定数据框、行索引、列索引和值,计算聚合函数(如平均分),并可打印或保存结果到文件。这允许对数据进行高效汇总和分析。
449 2
|
存储 数据库连接 数据处理
数据加载与保存:Pandas中的数据输入输出操作
【4月更文挑战第16天】Pandas是Python数据分析的强大工具,支持多种数据加载和保存方法。本文介绍了如何使用Pandas读写CSV和Excel文件,以及与数据库交互。`read_csv`和`to_csv`用于CSV操作,`read_excel`和`to_excel`处理Excel文件,而`read_sql`和`to_sql`则用于数据库的读写。了解这些基本操作能提升数据处理的效率和灵活性。
|
人工智能 机器人 Serverless
【Python】Pandas的一系列经典操作(非常实用)
【Python】Pandas的一系列经典操作(非常实用)
|
数据格式 Python
如何使用Python的Pandas库进行数据透视图(melt/cast)操作?
Pandas的`melt()`和`pivot()`函数用于数据透视。基本步骤:导入pandas,创建DataFrame,然后使用这两个函数转换数据格式。示例代码展示了如何通过`melt()`转为长格式,再用`pivot()`恢复为宽格式。输入数据是包含'Name'和'Age'列的DataFrame,最终结果经过转换后呈现出不同的布局。
310 6
|
数据可视化 Python
如何使用Python的Pandas库进行数据分组和聚合操作?
【2月更文挑战第29天】【2月更文挑战第105篇】如何使用Python的Pandas库进行数据分组和聚合操作?
334 0
下一篇
开通oss服务