gpt4 book ai didi

python - pandas dataframe 使用 np.where 并放在一起

转载 作者:行者123 更新时间:2023-11-28 21:41:25 25 4
gpt4 key购买 nike

我有一个数据框,我希望能够使用 np.where 根据给定条件查找某些元素,然后使用 pd.drop 删除与使用 np.where 找到的索引相对应的元素。

即,

idx_to_drop = np.where(myDf['column10'].isnull() | myDf['column14'].isnull())
myDf.drop(idx_to_drop)

但是我收到一个值错误,因为 drop 不采用 numpy 数组索引。有没有办法使用 np.where 和 pandas 中的一些 drop 函数来实现这一点?

最佳答案

有两种常见的模式可以实现这一点:


选择那些不满足您的“删除”条件的行或否定您的条件并选择满足这些条件的那些行 - @jezrael has provided a good example for that approach .


删除满足“删除”条件的行:

df = df.drop(np.where(df['column10'].isnull() | df['column14'].isnull())[0])

时间:第一种方法似乎更快一些:

设置:

df = pd.DataFrame(np.random.rand(100,5), columns=list('abcde'))
df.loc[::7, ::2] = np.nan
df = pd.concat([df] * 10**4, ignore_index=True)

In [117]: df.shape
Out[117]: (1000000, 5)

In [118]: %timeit df[~(df['a'].isnull() | df['e'].isnull())]
10 loops, best of 3: 46.6 ms per loop

In [119]: %timeit df[df['a'].notnull() & df['e'].notnull()]
10 loops, best of 3: 39.9 ms per loop

In [120]: %timeit df.drop(np.where(df['a'].isnull() | df['e'].isnull())[0])
10 loops, best of 3: 65.5 ms per loop

In [122]: %timeit df.drop(np.where(df[['a','e']].isnull().any(1))[0])
10 loops, best of 3: 97.1 ms per loop

In [123]: %timeit df[df[['a','e']].notnull().all(1)]
10 loops, best of 3: 72 ms per loop

关于python - pandas dataframe 使用 np.where 并放在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44803007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com