1、复杂查询
1)按逻辑筛选数据
df.loc[(df.Q1 < 90) & (df.Q1 > 80)]
#取Q1值在80到90之间的数据
df.loc[(df.Q1 < 90), ‘Q1’:]
#当Q1值小于90时,取Q1及后面所有列
2)函数筛选
df.Q1[lambda x: max(x.index)]
#取Q1列中索引最大的值
df.loc[lambda x: x.Q1==8, ‘Q1’:’Q2’]
#取Q1列值等于8的行,显示Q1、Q2列
df.loc[:3, lambda x: x.columns.str.len()==4]
#取列名长度等于4个字符的列,显示0到3行
df[df.Q1.eq(60)]
#取Q1列中值等于60的行
df[df.name.isin([‘Liver’])]
#取name列中值为Liver的行
3)查询df.query()
df.query(‘Q1>Q2>90’)
df.query(‘Q1+Q2+Q3+Q4>300’)
#条件查询
a=df.Q1.mean()
df.query(‘Q1>@a’)
#可以使用@符号引入变量
4)筛选df.filter()
df.filter(items=[‘Q1’, ‘Q2’])
#取Q1、Q2列
df.filter(regex=‘Q1’, axis=1)
#取Q1列
df.filter(regex=‘1$’, axis=1)
#取索引中以1结尾的行
df.filter(like=‘2’, axis=0)
#取索引中包括2的行
df.filter(regex=‘^2’, axis=0).filter(like=‘Q’, axis=1)
#在索引中没有2的行里去列名包括Q的行
5)按数据类型查询
df.select_dtypes(include=[‘int’])
#取数据类型是int的列
2、数据类型转换
1)推断类型
df.infer_objects() #自动转换合适的数据类型
df.infer_objects().dtypes #查看转换后的数据类型
df.convert_dtypes() #自动转换合适的数据类型,支持string类型
df.convert_dtypes().dtypes #查看转换后的数据类型
2)指定类型
m=[‘1’, 2, 3]
s=pd.to_numeric(m) #转成数字
s=pd.to_datetime(s) #转成时间
3)类型转换astype()
df.Q1.astype(‘int32’).dtypes #将Q1列数据类型转换成整型
df.astype({‘Q1’: ‘int32’, ‘Q2’: ‘int32’}).dtypes
#将Q1、Q2列数据类型转换为整型
4)转为时间类型
s=pd.Series([‘20200801’, ‘20200802’])
pd.to_datetime(s) #转为时间类型
s.astype(‘datetime64[ns]’) #转为时间类型