与SQL语法的对比
从上面几节的内容可以看出,Pandas在DataFrame上的操作与SQL十分相似。在实际应用中,DataFrame的一些特性也的确能够完成与SQL类似的查询。这里仅针对一些相似度较高的操作进行简要的介绍。
假设有一个DataFrame,其中有如下几列数据:id,client_code,type,bill,time。下面的对比都针对这几列数据来进行查询操作。
选择列查询
SQL: SELECT id, client_code, bill FROM df;
DataFrame: df[['id', 'client_code', 'bill']]
选择全部列,并只取前5行记录
SQL: SELECT * FROM df LIMIT 5;
DataFrame: df.head(5)
Where条件子句
SQL: SELECT * FROM df WHERE type='0' LIMIT 5;
DataFrame: df[df['type'] == '0'].head(5),该语句将一系列True/False对象传递给DataFrame,并将符合条件的所有行返回True。参与筛选的条件可以使用&、|、.isin()等来表示条件联合、条件或,以及列表包含等。
GroupBy分组
SQL: SELECT type, count(*) FROM df GROUP BY type;
DataFrame: df.groupby('type').size()
带聚合的GroupBy分组
SQL: SELECT client_code, max(time) FROM df GROUP BY grade;
DataFrame: df.groupby('client_code').agg({'time': np.max})
Join
SQL: SELECT * FROM df1 LEFT JOIN df2 ON df2.id=df1.id
DataFrame: pd.merge(df1, df2, how='left', left_on='id', right_on='id')
Distinct
SQL: SELECT DISTINCT client_code, time FROM df
DataFrame: df.drop_duplicates(subset=['client_code'], keep='first', inplace=True),其中keep表示保留哪一个值,可取first、last和False,分别表示第一个、最后一个和全部不保留。inplace参数默认为False,表示返回一个新的DataFrame,否则会在原来的DataFrame上进行修改。subset表示对哪些列进行排重。