首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Pandas |如何有效过滤列

Pandas |如何有效过滤列
EN

Stack Overflow用户
提问于 2020-06-01 02:40:50
回答 2查看 18关注 0票数 0

我正在寻找一种快速有效地过滤数据框列并删除不满足条件的值的方法。

假设我有一个数字为4、5和10的列,我想对该列进行过滤,并将大于7的任何数字替换为0。我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2020-06-01 03:43:29

有很多选择。一种可能性是如果然后..。是np.where

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd
import numpy as np

df = pd.DataFrame({'x': [1, 200, 4, 5, 6, 11],
                'y': [4, 5, 10, 24, 4 , 3]})
df['y'] = np.where(df['y'] > 7, 0, df['y'])
票数 0
EN

Stack Overflow用户

发布于 2020-06-01 03:48:33

你说的是两件不同的事情--过滤和值替换。它们都有用途,并且在本质上是相似的,但对于过滤,我将指出this great answer

假设我们的数据框名为df,如下所示

代码语言:javascript
代码运行次数:0
运行
复制
   A   B
1  4   10
2  4   2
3  10   1
4  5   9
5  10  3

A符合您关于只有4、5、10值的列的语句。如果您想用0替换大于7的数字,可以这样做:

代码语言:javascript
代码运行次数:0
运行
复制
df["A"] = [0 if x > 7 else x for x in df["A"]]

如果你通读右边,它清楚地解释了它在做什么。它有助于包括括号来分隔“做什么”和“你正在做什么”:

代码语言:javascript
代码运行次数:0
运行
复制
df["A"] = [(0 if x > 7 else x) for x in df["A"]]

如果您想对多个列进行操作,那么利用zip可以轻松地完成此操作。例如,如果需要列AB的总和,则:

代码语言:javascript
代码运行次数:0
运行
复制
df["sum"] = [x[0] + x[1] for x in zip(df["A"], df["B"])]

覆盖data时要小心-这会删除信息。将转换后的数据放在其他列中是一种很好的做法,这样您就可以在某些东西不可避免地变得不可靠时进行追溯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62120883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档