13个Pandas实用技巧,助你提高开发效率
需积分: 0 138 浏览量
更新于2020-09-16
收藏 58KB PDF 举报
### 13个Pandas实用技巧,助你提高开发效率
#### 1. 计算变量缺失率
在处理数据时,经常会遇到数据缺失的问题。为了有效地管理这些缺失值,了解每列数据的缺失比例至关重要。下面是一个示例代码片段,展示了如何计算DataFrame中各列的缺失率。
```python
import pandas as pd
def missing_cal(df):
"""
计算每个变量的缺失率
参数:
df (DataFrame): 数据集
返回:
DataFrame: 包含每个变量名及其对应的缺失率
"""
missing_series = df.isnull().sum() / df.shape[0] # 计算每一列的缺失值占比
missing_df = pd.DataFrame(missing_series).reset_index() # 转换为DataFrame,并添加索引列
missing_df = missing_df.rename(columns={'index': 'col', 0: 'missing_pct'}) # 重命名列
missing_df = missing_df.sort_values('missing_pct', ascending=False).reset_index(drop=True) # 排序并重新设置索引
return missing_df
# 示例数据
df = pd.read_csv('titanic_train.csv')
print(missing_cal(df))
```
如果你需要计算样本级别的缺失率分布(即按行计算),只需在调用`isnull()`方法后增加参数`axis=1`:
```python
missing_series = df.isnull().sum(axis=1) / df.shape[1]
```
#### 2. 获取分组里最大值所在的行方法
对于DataFrame中的分组数据,有时我们需要找出每个组中某个特定列的最大值所对应的行。这可以通过多种方式实现,这里提供两种情况下的解决办法:
**无重复值情况**
```python
df = pd.DataFrame({
'Sp': ['a', 'b', 'c', 'd', 'e', 'f'],
'Mt': ['s1', 's1', 's2', 's2', 's2', 's3'],
'Value': [1, 2, 3, 4, 5, 6],
'Count': [3, 2, 5, 10, 10, 6]
})
# 先按'Mt'列进行分组,然后对分组之后的数据框使用idxmax函数取出'Count'最大值所在的列,再用iloc位置索引将行取出
result = df.iloc[df.groupby(['Mt'])['Count'].idxmax()]
print(result)
```
**有重复值情况**
当分组中的最大值出现重复时,我们可以通过以下步骤来找到具有最大值的行:
```python
df["rank"] = df.groupby("ID")["score"].rank(method="min", ascending=False).astype(np.int64)
result = df[df["rank"] == 1][["ID", "class"]]
print(result)
```
这种方法首先对ID进行分组,然后根据得分进行排名,最后选出排名为1的记录。
#### 3. 多列合并为一行
有时候我们需要将DataFrame中的多列合并成一行。例如,假设有一个DataFrame,其中包含id_part、pred、pred_class等列,我们希望按照v_id将这些列合并。
```python
df = pd.DataFrame({
'id_part': ['a', 'b', 'c', 'd'],
'pred': [0.1, 0.2, 0.3, 0.4],
'pred_class': ['women', 'man', 'cat', 'dog'],
'v_id': ['d1', 'd2', 'd3', 'd1']
})
# 使用groupby和agg方法进行多列合并
result = df.groupby(['v_id']).agg({
'pred_class': ','.join,
'pred': lambda x: list(x),
'id_part': 'first'
}).reset_index()
print(result)
```
#### 4. 删除包含特定字符串所在的行
在实际操作中,可能需要删除DataFrame中包含某些特定字符串的行。例如,如果需要删除包含"exp"字符串的行,可以使用以下代码:
```python
df = pd.DataFrame({
'a': [1, 2, 3, 4],
'b': ['s1', 'exp_s2', 's3', 'exps4'],
'c': [5, 6, 7, 8],
'd': [3, 2, 5, 10]
})
# 删除包含特定字符串的行
filtered_df = df[~df['b'].str.contains('exp')]
print(filtered_df)
```
#### 5. 组内排序
在进行数据分析时,对特定组内的数据进行排序是非常常见的需求。下面是一个示例,演示了如何按名字分组并对得分进行降序排序。
```python
df = pd.DataFrame([
['A', 1],
['A', 3],
['A', 2],
['B', 5],
['B', 9]
], columns=['name', 'score'])
# 对名字分组并对得分进行降序排序
sorted_df = df.sort_values(['name', 'score'], ascending=[True, False])
print(sorted_df)
# 另一种方法
sorted_df = df.groupby('name').apply(lambda x: x.sort_values('score', ascending=False)).reset_index(drop=True)
print(sorted_df)
```
#### 6. 选择特定类型的列
在处理大型DataFrame时,有时候需要提取特定类型的数据列。Pandas提供了一个非常方便的方法`select_dtypes`来完成这项任务。
```python
drinks = pd.read_csv('data/drinks.csv')
# 选择所有数值型的列
numeric_columns = drinks.select_dtypes(include=['number']).head()
print(numeric_columns)
# 选择所有字符型的列
object_columns = drinks.select_dtypes(include=['object']).head()
print(object_columns)
# 选择多种类型的列
mixed_columns = drinks.select_dtypes(include=['number', 'object', 'category', 'datetime']).head()
print(mixed_columns)
# 排除特定类型的列
excluded_columns = drinks.select_dtypes(exclude=['number']).head()
print(excluded_columns)
```
以上就是关于Pandas中13个实用技巧的详细介绍,它们可以帮助你更高效地处理数据和编写Python代码。通过这些技巧的应用,你可以大大提升自己的工作效率,尤其是在面对复杂的数据分析任务时。
weixin_38605604
- 粉丝: 3
- 资源: 853
最新资源
- 云计算,搭建分布式,然后实现Titantic数据集训练、分类的的代码
- 同城宠物照看-JAVA-基于Spring Boot的同城宠物照看系统的设计与实现(毕业论文)
- 云计算,实现中文字频统计代码,课程设计
- weixin138社区互助养老+ssm(论文+源码)-kaic.zip
- 扶贫助农系统-JAVA-基于spring boot扶贫助农系统设计与实现(毕业论文)
- 母婴护理知识共享-JAVA-基于SpringBoot+vue 的母婴护理知识共享系统(毕业论文)
- 番茄叶片图像病害多标签分类,约5600张数据
- 影音互动科普网站-JAVA-基于SpringBoot的哈利波特书影音互动科普网站设计与实现(毕业论文)
- 航空散货调度-JAVA-基于SpringBoot的航空散货调度系统设计与实现(毕业论文)
- 基于Python Scrapy的贝壳找房爬虫程序
- zigbee CC2530无线自组网协议栈实现一个协调器+多个终端的通讯及控制.zip
- 校园二手物品交易-JAVA-基于springBoot的校园二手物品交易系统的设计与实现(毕业论文)
- 计算机视觉项目:Swin-Transformer 【tiny、small、base】模型实现的图像识别项目:番茄病害图像分类
- 功能完善的电商数据智能爬虫采集系统项目全套技术资料.zip
- 青少年心理健康教育网-JAVA-基于springboot的青少年心理健康教育网站的设计与实现(毕业论文)
- 密评流程及商密应用方案解析