过滤掉数据帧

时间:2016-10-14 20:20:52

标签: python dataframe

我想过滤掉一个数据帧。试图使用标准的布尔(多个)表达式,但它不起作用。我的代码是:

import pandas as pd
import numpy as np

# Setting a dataframe
dates = pd.date_range('1/1/2000', periods=10)

df1 = pd.DataFrame(np.random.randn(10, 4), index=dates, columns=['A', 'B', 'C', 'D'])

# Filtering
df1 = df1.loc[lambda df: -0.5 < df1.A < 0 and 0 <= df1.B <= 1, :]

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

不需要匿名lambda函数。只需使用布尔语句进行过滤。另外,请注意使用按位运算符&,而不是布尔运算符and。以下是过滤的等效变体:

df1 = df1.query('(A > -0.5) & (A < 0) & (B >= 0) & (B <= 1)', engine='python'))

df1 = df1.loc[(df1.A > -0.5) & (df1.A < 0) & (df1.B >= 0) & (df1.B <= 1)]

df1 = df1[(df1.A > -0.5) & (df1.A < 0) & (df1.B >= 0) & (df1.B <= 1)]

甚至考虑使用pandas.Series.between

df1 = df1.loc[(df1.A.between(-0.5, 0, inclusive=False) & (df1.B.between(0, 1))]