版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Apply是为Pandas Series而设计的。如果你不太熟悉Series,可以将它想成类似Numpy的数组。
Apply将一个函数应用于指定轴上的每一个元素。使用Apply,可以将DataFrame列(是一个Series)的值进行格式设置和操作,不用循环,非常有用!
import numpy as np
import pandas as pd
s = pd.DataFrame([range(5), range(5)])
print(s)
0 1 2 3 4
0 0 1 2 3 4
1 0 1 2 3 4
d = pd.DataFrame([[4, 9]]*3)
print(d)
0 1
0 4 9
1 4 9
2 4 9
d01 = d.apply(np.sqrt)
print(d01)
0 1
0 2.0 3.0
1 2.0 3.0
2 2.0 3.0
d02 = d01.apply(np.sum, axis=0)
print(d02)
0 6.0
1 9.0
dtype: float64
d03 = d.apply(np.mean, axis=1)
print(d03)
0 6.5
1 6.5
2 6.5
dtype: float64
下面是一些数据分析案列 主要是将apply 的应用:
一般我们拿到的特征中会有薪资,薪资的区间以及K 等字符是比较难处理的,下面是我目前处理的比较好的方法
import numpy as np
import pandas as pd
datas = pd.read_csv('./a.csv')
print(datas.head(10))
print(datas.City.value_counts()) # 按某列统计次数
def cut_word(word, method):
position = word.find('-')
length = len(word)
if position != -1: # 无 - 的话 结果返回-1
bot_salary= word[:position - 1]
top_salary = word[position + 1:length - 1]
else:
bot_salary= word[:word.upper().find("K")]
top_salary = bot_salary
if method == "bot":
return bot_salary
return top_salary
data = datas.Salary.apply(cut_word, method="bot")
print(data.head(10))
运行结果:
City Age Gender Salary Work_in Birthday Indetify Romote Soh
0 北京 29 male 20k-28K 0.30 6.0 73 50 8
1 北京 29 male 10-18K 0.30 6.0 73 50 8
2 北京 29 male 2k-3k以上 0.30 6.0 73 50 8
3 北京 29 male 20k 0.30 6.0 73 50 8
4 北京 29 male 2k以上 0.30 6.0 73 50 8
5 北京 32 female 6k 0.50 26.0 58 55 6
6 上海 47 male 2k-4k 0.33 5.0 106 92 6
7 北京 30 male 12k-16k 0.30 7.0 76 58 11
8 武汉 37 f 2k-4k 0.40 23.0 68 72 8
9 上海 47 female 2k-4k 0.60 13.0 67 28 10
北京 38
上海 25
南京 17
武汉 10
广州 6
杭州 4
天津 4
深圳 2
Name: City, dtype: int64
0 20
1 1
2 2
3 20
4 2
5 6
6 2
7 12
8 2
9 2
Name: Salary, dtype: object