与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
表示对哪些列进行排重。