再见!Pandas!!

文摘   科技   2024-09-21 15:26   北京  

核心点:50个核心Pandas操作!

哈喽,我是cos大壮~

上次分享过关于numpy的相关内容,大家反馈很受用,日常用到的某些操作,翻出来查一下就可以了,非常非常的方便。

那咱们今天把它的好兄弟,pandas的内容分享一拨。

先把pandas的官网给出来,有找不到的问题,直接官网查找:https://pandas.pydata.org/

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

IDNameAgeSalaryStatus
101Alice2550000Active
102Bob3060000Inactive
103Charlie2245000Active
104David3575000Active
105Eva2855000Inactive

每个案例包括使用方式、示例、以及一段Python代码。

老规矩:大家伙如果觉得近期文章还不错!欢迎大家点个赞、转个发~ 

经过了几天的整理,内容已经是比较全面了,大家想要获取的。

规则照旧,文末获取PDF版本,那咱们开始吧~

50个超强Pandas操作

1. 创建DataFrame

  • 使用字典创建DataFrame
import pandas as pd

data = {'ID': [101102103104105],
        'Name': ['Alice''Bob''Charlie''David''Eva'],
        'Age': [2530223528],
        'Salary': [5000060000450007500055000],
        '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=[20304050], labels=['20-30''30-40''40-50'])

使用方式: 使用cut函数将数值列分成不同的箱子,用标签表示。

示例: 将“Age”列分成年龄组。

df['AgeGroup'] = pd.cut(df['Age'], bins=[20304050], labels=['20-30''30-40''40-50'])

34. 使用groupbytransform进行组内操作

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. 使用duplicateddrop_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. 使用nlargestnsmallest获取最大和最小值

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. 使用atiat快速访问元素

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)

好了,这就是今天分享的全部内容。

对于初学者,我建议可以花几个小时甚至再长点时间,一个一个的过一下,有一个整体的理解。

之后在实际的使用中,就会方便很多。

对于老coder,应该扫一眼就ok了。

最后

大家有问题可以直接在评论区留言即可~
喜欢本文的朋友可以收藏、点赞、转发起来!
需要本文PDF的同学,扫码备注「Pandas」即可~ 
关注本号,带来更多算法干货实例,提升工作学习效率!
最后,给大家准备了《机器学习学习小册》PDF版本16大块的内容,124个问题总结

推荐阅读

原创、超强、精华合集
100个超强机器学习算法模型汇总
机器学习全路线
机器学习各个算法的优缺点
7大方面,30个最强数据集
6大部分,20 个机器学习算法全面汇总
铁汁,都到这了,别忘记点赞呀~

深夜努力写Python
Python、机器学习算法
 最新文章