与SQL语法的对比

从上面几节的内容可以看出,Pandas在DataFrame上的操作与SQL十分相似。在实际应用中,DataFrame的一些特性也的确能够完成与SQL类似的查询。这里仅针对一些相似度较高的操作进行简要的介绍。

假设有一个DataFrame,其中有如下几列数据:idclient_codetypebilltime。下面的对比都针对这几列数据来进行查询操作。

选择列查询

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表示保留哪一个值,可取firstlastFalse,分别表示第一个、最后一个和全部不保留。inplace参数默认为False,表示返回一个新的DataFrame,否则会在原来的DataFrame上进行修改。subset表示对哪些列进行排重。