8、Python数据分析-Pandas⾼级操作1、替换操作replace()
替换操作可以同步作⽤于Series和DataFrame中
df = DataFrame(data=np.random.randint(0,20,size=(5,6)))
1.1、单值替换
普通替换:替换所有符合要求的元素:to_replace=15,value='e'
#将1替换成one
按列指定单值替换: to_replace={列标签:替换值} value='value'
1.2、多值替换
列表替换: to_replace=[] value=[]
字典替换(推荐) to_replace={to_replace:value,to_replace:value}
2、映射操作map()
概念:创建⼀个映射关系列表,把values元素和⼀个特定的标签或者字符串绑定(给⼀个元素值提供不同的表现形式)创建⼀个df,两列分别是姓名和薪资,然后给其名字起对应的英⽂名
dic = {
'name':['张三','李四','张三'],
'salary':[15000,20000,15000]
}
df = DataFrame(data=dic)
映射关系表
dic = {
'张三':'tom',
'李四':'jay'
}
df['e_name'] = df['name'].map(dic)
map是Series的⽅法,只能被Series调⽤
2.1、map运算操作
超过3000部分的钱缴纳50%的税,计算每个⼈的税后薪资
def after_sal(s):
return s - (s-3000)*0.5
df['after_sal'] = df['salary'].map(after_sal)
4、排序实现的随机抽样take()
df = DataFrame(data=np.random.randint(0,100,size=(100,3)),columns=['A','B','C'])
np.random.permutation(5)
>>>
array([4, 3, 0, 2, 1])
#将原始数据打乱⼿动 indices列
# df.take(indices=[2,0,1],axis=1)
#将原始数据打乱获取前10条
df.take(indices=np.random.permutation(3),axis=1).take(indices=np.random.permutation(100),axis=0)[0:10]
5、数据的分类处理groupby()
数据分类处理的核⼼:
groupby()函数
groups属性查看分组情况
df = DataFrame({'item':['Apple','Banana','Orange','Banana','Orange','Apple'],
'price':[4,3,3,2.5,4,2],
'color':['red','yellow','yellow','green','green','green'],
'weight':[12,20,50,30,20,44]})
返回原始数据分组之后的对象结果
>>>
&ic.DataFrameGroupBy object at 0x0000020FABDB1EB8>查看分组详情
>>>
{'Apple': Int64Index([0, 5], dtype='int64'),
'Banana': Int64Index([1, 3], dtype='int64'),
'Orange': Int64Index([2, 4], dtype='int64')}
计算每⼀种⽔果的平均价格
#⽅式⼀:
#df.groupby(by='item').mean()
>>>
item
Apple    3.00
Banana    2.75
Orange    3.50
Name: price, dtype: float64
#⽅式⼆:推荐使⽤
mean_series = df.groupby(by='item')['price'].mean()
>>>
item
Apple    3.00
Banana    2.75
python 定义数组Orange    3.50
Name: price, dtype: float64
将⽔果的平均价格汇总到源数据
dic = _dict()#装换成字典的格式
df['mean_price'] = df['item'].map(dic)
求出每⼀种颜⾊⽔果的平均重量,然后进⾏数据汇总
dic = df.groupby(by='color')['weight'].mean().to_dict()
df['mean_weight'] = df['color'].map(dic)
6、⾼级⾃定义数据聚合transform()|apply()
使⽤groupby分组后,也可以使⽤transform和apply提供⾃定义函数实现更多的运算transform():直接汇总数据,进⾏映射,返回的是分组求和后的原dataframe的数据结构。apply():进⾏映射,才能汇总数据,返回的是pandas的对象或者标量。
transform和apply都会进⾏运算,在transform或者apply中传⼊函数即可
transform和apply也可以传⼊⼀个lambda表达式
⽔果的平均价格
def my_mean(s):
sum = 0
for i in s:
sum += i
return sum / len(s)
>>>
0    3.00
1    2.75
2    3.50
3    2.75
4    3.50
5    3.00
Name: price, dtype: float64
每⼀种⽔果的平均价格
def my_mean(s):
sum = 0
for i in s:
sum += i
return sum / len(s)
>>>
item
Apple    3.00
Banana    2.75
Orange    3.50
Name: price, dtype: float64
7、数据加载保存-数据库sqlite3
1、读取⽂件数据
df = pd.read_csv('./')
#查看维度
df.shape

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。