- groupby相关操作
- apply相关操作
- plot相关操作
- 1. 双轴图表
当list中含有np.nan时,如果用Counter去统计词频,就会巨慢。
apply相关操作“Apply an function along an axis” 函数很好用了,就是沿着行或者列进行运算. DataFrame.apply(func, axis)
作者的思维习惯是:1. function work on columns row by row And 2. function work on index column by column。
重要参数列表如下:
- func 定义的函数,函数应该与axis保持一致。
- axis func的工作方向,值域为:
0,‘index’ 表示func处理的是整列数据。
1,‘columns’ 表示func处理的是整行的数据。
默认值为0,是整列的操作。
但是整列整列的操作是在np.array上操作的,所以速度会优于行操作。
例子:
>>> df = pd.DataFrame({"name": ["小明", "小红"], "score": [80, 90]}, columns=["name", "score"])
>>> df
name score
0 小明 80
1 小红 90
>>> class Variance:
>>> call_times_axis0 = 0
>>> call_times_axis1 = 0
>>> def mama_axis0(x):
>>> Variance.call_times_axis0 += 1
>>> return x+"的妈妈"
>>> def mama_axis1(x):
>>> Variance.call_times_axis1 += 1
>>> return x["name"]+"的妈妈"
>>> print(Variance.call_times_axis0, Variance.call_times_axis1)
0 0
### 下面这几种情况结果是等价的
>>> df["妈妈0"] = df.name.apply(lambda x:x + "的妈妈") # 整列的
>>> df["妈妈01"] = df.name.apply(mama_axis0) # 整列的
>>> df["妈妈1"] = df.apply(lambda row: row["name"] + "的妈妈", axis='columns') # 整行的
>>> df["妈妈11"] = df.apply(mama_axis1, axis=1) # 整行的
>>> df["妈妈"] = df.name + "的妈妈" # 整列的操作,建立在np.array之上,速度是这几种方法中最快的。
>>> df
name score 妈妈0 妈妈01 妈妈1 妈妈11 妈妈
0 小明 80 小明的妈妈 小明的妈妈 小明的妈妈 小明的妈妈 小明的妈妈
1 小红 90 小红的妈妈 小红的妈妈 小红的妈妈 小红的妈妈 小红的妈妈
# 说明两种情况下,都是调用函数两次
>>> print(Variance.call_times_axis0, Variance.call_times_axis1)
2 2
plot相关操作
df.plot支持的一些图表如下:
一个图表也就是一个Axes,即一些axis的集合。以柱状图为例,原本它只有x轴和y轴,现在要多出来一个y轴,且与之共用x轴。
df = pd.DataFrame({"x": [1,2,3], "y1": [1.1, 1.2, 1.3], "y2": [0.1, 0.2, 0.4]},
columns=['x', 'y1', 'y2'])
axes = df.plot.bar(x="x", y="y1", color="orange")
axes.set_ylabel("y1", color="orange")
axes1 = axes.twinx()
axes1 = df.y2.plot.line(ax=axes1, color="blue")
_ = axes1.set_ylabel("y2", color="blue")



