50个超强的Pandas操作 !!

发布时间:2024年01月24日

这篇文章可以算是直接搬运了,偶然看到cos大壮作者的关于Pandas的输出内容,一些很基础且很实用的功能函数。

文章目录

前言

50个超强的Pandas操作

1. 创建 DataFrame

2. 查看数据的前几行

3. 查看数据的后几行

4. 查看数据基本信息

5. 描述性统计信息

6. 选择列

7. 选择多列

8. 选择行

9. 选择特定行和列

10. 条件选择(Filtering)

11. 多条件选择

12. 排序数据

13. 处理缺失值

14. 填充缺失值

15. 新增列

16. 删除列

17. 重命名列

18. 分组统计

19. 合并DataFrame

20. 横向合并DataFrame

21. 合并DataFrame(基于键)

22. 透视表

23. 独热编码

24. 字符串处理

25. 日期时间处理

26. 时间序列重采样

27. 滑动窗口

28. 绘制图表

29. 保存DataFrame到文件

30. 从文件加载数据到DataFrame

31. 使用apply函数对列进行操作

32. 使用map函数进行值替换

33. 使用cut函数进行分箱处理

34. 使用groupby和transform进行组内操作

35. 使用astype进行数据类型转换

36. 使用isin进行过滤

37. 使用duplicated和drop_duplicates处理重复值

38. 使用nlargest和nsmallest获取最大和最小值

39. 使用value_counts计算唯一值的频率

40. 使用str.contains进行模糊匹配

41. 使用replace进行值替换

42. 使用pivot进行数据透视

43. 使用merge处理重复列名

44. 使用at和iat快速访问元素

45. 使用mask进行条件替换

46. 使用query进行条件查询

47. 使用crosstab进行交叉表

48. 使用explode展开列表

49. 使用agg进行多个聚合操作

50. 使用pipe进行链式操作


前言

首先给出一个示例数据,是一些用户的账号信息,基于这些数据,这里给出最常用,最重要的50个案例。

IDNameAgeSalaryStatus
101Alice2550000Active
102Bob3060000Inactive
103Charlie2245000Active
104David3575000Active
105Eva2855000Inactive

每个案例包括使用方式、示例、以及一段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大壮

文章来源:https://blog.csdn.net/leonardotu/article/details/135818992
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。