在一些方法当中会使用到 axis, 一开始的时候会对这个参数的意义很模糊,现在罗列出来,做一下初步的讲解。
1 | def func(x, y ): |
axis默认为0,代表参数x为一列。
axis=1时,代表参数为一行。
筛选数据时的与或非
1 | And_df = df[(df['Rating']>5) & (df['Votes']>100000)] |
1 | df[len(df['Title'].split(" "))>=5] # 报错 AttributeError: 'Series' object has no attribute 'split' |
很容易看得出来,df[‘Title’]是一列,是一个Series,所以没有split方法。
是否可以用 df['Title'].str.split(" ")
??
可以通过如下方法来解决。
1 | #创建一个新的列来存储每一影片名的长度 |
x代表一行了,x[‘Title’]就是一个字符串了。
复杂筛选
筛选出那些影片的票房低于当年平均水平的数据。
我们先要对每年票房的的平均值做一个归总
1 | year_revenue_dict = df.groupby(['Year']).agg({'Revenue(Millions)':np.mean}).to_dict()['Revenue(Millions)'] |
然后我们定义一个函数来判断是否存在该影片的票房低于当年平均水平的情况,返回的是布尔值
1 | def bool_provider(revenue, year): |
然后我们通过结合apply方法和lambda方法应用到数据集当中去
1 | new_df = df[df.apply(lambda x : bool_provider(x['Revenue(Millions)'], x['Year']), axis = 1)] |
方法调用过程的可视化
1 | from tqdm import tqdm, tqdm_notebook |