13个Pandas实用技巧,助你提高开发效率

preview
需积分: 0 1 下载量 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
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜