pandas数据选取3(at与iat/条件筛选/文本筛选)

数据筛选3

#1.at与iat

#at 通过设置行或列的索引名称来获取单个单元格的数据
#at的功能比较单一,所有的功能均可有loc来完成
var = df.at[1,"name"]#选取整个数据框
#以下为获取单元格的几种常见的方法
df.at["e","name"]
df.loc["e"].at["name"]
df["name"].at["e"]
df.iloc[0].at["name"]

#iat
#iat的功能比较单一,所有的功能均可有iloc来完成
#以下为获取单元格的几种常见的方法
df.iat[0,0]
df.loc["e"].iat[0]
df["name"].iat[0]
df.iloc[0].iat

#2.通过条件判断进行数据筛选
#对于图中函数与数学符号,在pandas中是等价的

#常见的数据条件筛选

a = {"name":["lemon","jack","peter","Emma","james"],
     "city":["长沙","上海","深圳","北京","北京"],
     "a":[80,90,60,73,89],
     "b":[80,75,80,85,83],
     "c":[70,75,80,73,62]}

df = pd.DataFrame(data=a,index=["d","e","f","g","h"])

var = df[df["a"] > 70] #选取df中所有a列大鱼70的数据行
var = df[df["a"].gt(70)] #与上面的函数是等价的
var = df[df["a"]+df["b"]>164] #选取"a"列与"b"列中的和大于164的所有行
#对于 字符串类型的也是可以的,用等号进行判断
var = df[df["name"] == "jack"]

#多个条件下的数据筛选
var = df[(df["a"]>70) & (df["b"]> 80)]
var = df[(df["a"]>70) & (df["b"]> 80)]

var = df[df["a"] > 70][["name","a"]] #选取a列中大于70的行并选中“name”与“a”列

var = df.loc[df["a"]>70,["name","a"]] #loc也是同样的效果

#新建一个d列,将a列进行分类
df1 = df.copy()
df1.loc[df1["a"]>69,"d"] = "grade A"
df1.loc[df1["a"]<=69,"d"] = "grade B"
print(df1)




#文本筛选 str.contains()
#str.contains()一般情况下返回的是布尔型的Series,
#参数解释
Series.str.contains(
pat,#字符串或正则表达式,用来设置需要筛选的文本
case=True,#是否区分大小写
flages=0,#正则表达式情况下,re模块参数的设置,默认为0是没有设置的
na=None,#缺失值的填充设置参数
regex=True,#是否以正则表达式的方式进行筛选

)
a = {"name":["lemon","jack","peter","Emma","james"],
     "city":["长沙","上海","深圳","北京","北京"],
     "a":[80,90,60,73,89],
     "b":[80,75,80,85,83],
     "c":[70,75,80,73,62]}
df = pd.DataFrame(data=a,index=["d","e","f","g","h"])
#文本筛选
#当pat为字符串时默认返回的是含有该字符串的列
a = df[df["name"].str.contains("e",)]
a = df[df["name"].str.contains("e",case=False)]#不区分大小写
a = df[df["name"].str.contains("^L",regex=True,case=False)]#应用正则表达式


# NA值得处理
df5 = df.copy()
df5.loc[df5["name"] == "james","name"] = np.NaN
a = df5["name"].str.contains("e",na = False)#对NA值进行设置,当na = False在进行条件筛选是不包括Na值所在的行

#startswith
#筛选某个字母为开头的行
a = df[df["name"].str.startswith("l")]#以l为开头的行
print(a)

#endswith
#筛选某个字母为结尾的行
a = df[df["name"].str.endswith("l")]#以l为开头的行
print(a)

posted @ 2023-02-14 11:44  小杨的冥想课  阅读(149)  评论(0编辑  收藏  举报