本文大纲
导入相关库和数据读取
import numpy as np import pandas as pd df = pd.read_csv("tips.csv",encoding="gbk") df.head()
结果如下:
1.Select数据查询
在SQL中,选择是使用您要选择的列(用逗号分隔)或(*选择所有列)来完成的。
SELECT '总费用', '小费', '是否吸烟', '吃饭时间' FROM df LIMIT 5;
对于pandas,通过将列名列表传递给DataFrame来完成列选择。
df[['总费用', '小费', '是否吸烟', '吃饭时间']].head(5)
结果如下:
注意:调用不带列名列表的DataFrame将显示所有列(类似于SQL的 *)。
在SQL中,您可以添加一个计算列:
SELECT *, "小费"/"总费用" as "小费占比" FROM df LIMIT 5;
对于pandas,可以使用DataFrame.assign()的方法追加新列。
df.assign(小费占比=df['小费'] / df['总费用']).head(5)
结果如下:
2.Where按条件查询
通过WHERE子句在SQL中进行过滤。
SELECT * FROM df WHERE 吃饭时间 = '晚餐' LIMIT 5;
DataFrame可以通过多种方式进行过滤。最直观的方法是使用布尔索引。
df[df['吃饭时间'] == '晚餐'].head(5)
结果如下:
上面的语句只是将Series的True / False对象传递给DataFrame,并返回所有带有True的行。
is_dinner = df['吃饭时间'] == '晚餐' is_dinner.value_counts() df[is_dinner].head(5)
结果如下:
就像SQL的OR和AND一样,可以使用|将多个条件传递给DataFrame。|(OR)和&(AND)。
SELECT * FROM df WHERE 吃饭时间 = '晚餐' AND 小费 > 5.00;
那么,在DataFrame代码应该怎么写呢?
df[(df['吃饭时间'] == '晚餐') & (df['小费'] > 5.00)]
结果如下: