pandas的使用(2)数据选取
这里写目录标题
- 数据选取的使用方法
- Leetcode题目《1148.文章浏览I》
- 方法1.使用iterrows()遍历每一行处理
- 方法2.使用loc筛选条件
- 方法3.不使用loc筛选条件
数据选取的使用方法
场景 | 推荐写法 | 返回类型 | 能否赋值 |
---|---|---|---|
取单列 | df['col'] 或 df.col | Series | ✅ |
取多列 | df[['c1','c2']] | DataFrame | ✅ |
按标签切片行 | df['a':'c'] | DataFrame | ✅(闭区间) |
按位置切片行 | df[0:3] | DataFrame | ✅(左闭右开) |
同时标签选行+列 | df.loc[row, col] | Series/DataFrame | ✅ |
同时位置选行+列 | df.iloc[r, c] | Series/DataFrame | ✅ |
布尔索引 | df[mask] 或 df.loc[mask] | DataFrame | ✅(后者更安全) |
快速筛选 | df.query(expr) | DataFrame | ✅(返回副本) |
Leetcode题目《1148.文章浏览I》
方法1.使用iterrows()遍历每一行处理
import pandas as pddef article_views(views: pd.DataFrame) -> pd.DataFrame:output = pd.DataFrame(columns=['id'])for index, row in views.iterrows():if row['author_id'] == row['viewer_id']:new_row = pd.DataFrame({'id': [row['author_id']]})output = pd.concat([output, new_row], ignore_index=True)return output.drop_duplicates().sort_values(by='id')
方法2.使用loc筛选条件
import pandas as pddef article_views(views: pd.DataFrame) -> pd.DataFrame:# 创建一个空 DataFrame,指定列名和类型result = pd.DataFrame(columns=['id'])# 过滤条件mask = views['author_id'] == views['viewer_id']ids = views.loc[mask, 'author_id'].drop_duplicates().sort_values()# 赋值给结果result = pd.DataFrame({'id': ids})return result
方法3.不使用loc筛选条件
import pandas as pddef article_views(views: pd.DataFrame) -> pd.DataFrame:# 创建一个空 DataFrame,指定列名和类型result = pd.DataFrame(columns=['id'])# 过滤条件mask = views['author_id'] == views['viewer_id']ids = views[mask]['author_id'].drop_duplicates().sort_values()# ids = views.loc[mask, 'author_id'].drop_duplicates().sort_values()# 赋值给结果result = pd.DataFrame({'id': ids})return result