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]’) #转为时间类型