Pandas的筛选

1
import pandas as pd
1
2
url = "http://www.51chanlun.com/hot.html"
df = pd.read_html(url, header=0, encoding="utf-8")[3]

筛选

以网络获取的股票热点板块数据举例

1
2
3
cols = df.columns
df = df.iloc[:20, :15]
df[:10]

Output:

单个条件

简单筛选

某列的值满足条件

1
df[df["新高个股数"] >= 3]

Output:

map 函数

1
df[df["新高个股数"].map(lambda x: x >= 3)]

Output:

query方法

1
df.query("新高个股数>=3")

Output:

多条件筛选

简单筛选

  • 每个条件要用括号包含起来
  • 条件与条件之间用连接符 “|”: 或 , “&”:与
1
df[(df["新高个股数"]>=3) | (df["板块强弱指标"]>=4) ]

Output:

1
df[(df["新高个股数"]>=3) & (df["板块强弱指标"]>=4) ]

Output:

map函数

1
2
3
tj1 = df["新高个股数"].map(lambda x: x >= 3)
tj2 = df["板块强弱指标"].map(lambda x: x >= 4)
df[tj1 | tj2]

Output:

1
df[tj1 & tj2]

Output:

query方法

1
df.query("新高个股数>=3 & 板块强弱指标>=4")

Output:

同列多条件

.isin() 及反选

1
2
tj=["医药","医疗保健","互联网","有色","软件服务"]
df[df["概念类别"].isin(tj)]

Output:

1
df[~df["概念类别"].isin(tj)]

Output:

.str.contains()及反选

1
df[df["概念类别"].str.contains("医药|工业机械|汽车类|家居用品")]

Output:

1
df[~df["概念类别"].str.contains("医药|工业机械|汽车类|家居用品")]

Output:

同条件对多列筛选

1
2
3
4
''' 每一列的数据中不包含0 和"N" '''
tj = df.apply(lambda x: ("N" not in x.to_list())
& (0 not in x.to_list()), axis=1)
df[tj]
' 每一列的数据中不包含0 和"N" '

Output: