pandas groupby用法什么时候用 series 不用列表?

一。概念Series相当于一维数组。1.调用Series的原生方法创建import pandas as pds1 = pd.Series(data=[1,2,4,6,7],index=['a','b','c','d','e'])# index表示索引print(s1['a'])print(s1[0])print(s1[:3])# 在Series中切片是一个闭合区间表示Series中0-3的元素 print(s1['a':'d']) # 范围是一个闭合print(s1[['a','d']]) #用逗号隔开,表示分别取这两个元素 注意
这里用两个中括号括起来2.使用字典生成Seriessdata = {'beijing':45000, 'shanghai':71000, 'guangzhou':16000, 'shengzheng':5000}obj3 = Series(sdata)print(obj3)print("-"*40)states = ['hangzhou', 'shanghai', 'guangzhou','beijing']
obj4 = Series(sdata, index = states) # 索引重置 使用字典生成Series,并额外指定index,不匹配部分为NaN。 print(obj4)# #替换index 索引替换obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']print(obj)#Series相加,相同索引部分相加。不相同的索引部分为NaN print(obj3 + obj4)
二。Series的相关特性及函数from pandas import Series#用数组生成Series ,默认情况下使用数字索引obj = Series([4, 7, -5, 3])print(obj)print(obj.values)
print(obj.index)
print(obj.shape,obj.ndim) # 这里 shape表示每一个维度的数量, ndim表示的是维度
obj2 = Series([4, 7, -5, 3], index = ['d', 'b', 'a', 'c'])print(obj2.index)print(obj2['a'])obj2['d']=6 #替换Series中的元素print(obj2)# print(obj2[:3]) # 数字的下标还存在,也可以分片# print(obj2[['c', 'a', 'd']]) #获取索引a,c,d的值# print(obj2[obj2 > 0])
# 找出大于0的元素# print('b' in obj2) # 判断索引是否存在
# print('e' in obj2)
# print("-"*40)# # #指定Series及其索引的名字obj4.name = '我定义的名字'obj4.index.name = 'index'print(obj4) 持续更新中。。。。,欢迎大家关注我的公众号LHWorld.http://weixin.qq.com/r/KThudqrEqPfXre4V9207 (二维码自动识别)}
为什么要学习pandas?那么问题来了:numpy已经能够帮助我们处理数据,能够结合matplotlib解决我们数据分析的问题,那么pandas学习的目的在什么地方呢?numpy能够帮我们处理处理数值型数据,但是这还不够很多时候,我们的数据除了数值之外,还有字符串,还有时间序列等比如:我们通过爬虫获取到了存储在数据库中的数据比如:之前youtube的例子中除了数值之外还有国家的信息,视频的分类(tag)信息,标题信息等所以, numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据1、pandas常用数据类型Series 一维,带标签数组DataFrame 二维,Series容器1.1 pandas之Series创建# coding=utf-8
import pandas as pd
import string
# a = pd.Series([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], index=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'])
a = {string.ascii_uppercase[i]: i for i in range(10)}
print(pd.Series(a))
# 如果是字典类型呢?
temp_dict = dict(name="xiaoping", age=20, tel=100086)
b = pd.Series(temp_dict)
print(b)
c = pd.Series([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(c)
输出结果:
A
0
B
1
C
2
D
3
E
4
G
6
H
7
I
8
J
9
dtype: int64
name
xiaoping
age
20
tel
100086
dtype: object
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
dtype: int64
1.2 pandas之Series切片和索引对于一个陌生的series类型,我们如何知道他的索引和具体的值呢?点击百度搜索:Series.where(cond, other=nan, inplace=False, axis=None, level=None, errors=‘raise’, try_cast=False)import numpy as np
import pandas as pd
import string
s = pd.Series(range(5))
print(s.where(s > 0))
print(s.mask(s > 0))
print(s.where(s > 1, 10))
# 小于1的替换为10
输出结果:
0
NaN
1
1.0
2
2.0
3
3.0
4
4.0
dtype: float64
0
0.0
1
NaN
2
NaN
3
NaN
4
NaN
dtype: float64
0
10
1
10
2
2
3
3
4
4
dtype: int64
1.3 pandas之读取外部数据import pandas as pd
# pandas读取csv中的文件
df = pd.read_csv("./dogNames2.csv")
print(df[(800 < df["Count_AnimalName"])
(df["Count_AnimalName"] < 1000)])
输出结果
Row_Labels
Count_AnimalName
0
1
1
1
2
2
2
40804
1
3
90201
1
4
90203
1
...
...
...
16215
37916
1
16216
38282
1
16217
38583
1
16218
38948
1
16219
39743
1
[16220 rows x 2 columns]
读取mongodb中的数据改进与进阶练习请看下章dataframe的学习from pymongo import MongoClient
import pandas as pd
client = MongoClient()
collection = client["douban"]["tv1"]
data = list(collection.find())
t1 = data[0]
t1 = pd.Series(t1)
print(t1)
输出显示:
E:\PycharmProjects\untitled\venv\Scripts\python.exe E:/PycharmProjects/untitled/数据分析/day03_pandas/page108.py
_id
59ba7f9b421aa91b08a43faa
info
王伟/潘粤明/王泷正/梁缘/剧情/犯罪/悬疑/2017-08-30(中国大陆)
original_price
None
release_date
08.30
rating
{'count': 23043, 'max': 10, 'value': 9}
description
title
白夜追凶
url
https://m.douban.com/movie/subject/26883064/
price
None
cover
{'url': 'https://qnmob2.doubanio.com/view/movi...
uri
douban://douban.com/tv/26883064
actions
[可播放]
label
None
subtype
directors
[王伟]
actors
[潘粤明, 王泷正, 梁缘]
date
None
reviewer_name
forum_info
{'id': 'tv/26883064', 'participant_count': 453...
type
tv
id
26883064
tv_category
chinese
tv_url_parameter
filter_tv_domestic_hot
total_num
None
parse_url
https://m.douban.com/rexxar/api/v2/subject_col...
total
2123
dtype: object
Process finished with exit code 0
本小结注意事项在运行读取mongodb中的数据 的代码的时候,下载mongoDB出现的问题:安装mongoDB一直处于安装状态,安装不成功!解决办法:选择自定义安装(Coustom)紧接着把下面图片中的复选框 勾掉,不选 这是mongoDB的图形用户界面,可以不选,如果想要安装可以等mongoDB安装完成后,独立安装。2.刚刚安装的 mongodb数据库文件缺失很多工具,需要单独下载下载工具集将下载的工具集文件bin里的工具都复制到原先下载的mongodb的bin目录下即可3. 在使用mongoresotore命令导入(douban)数据库时,一直错误原因是该命令是在进入cmd命令是运行的,而不是运行后mongo再运行的图1是正确的最后附上mongoDB中运行的豆瓣数据集,下载后,使用mongoresotore命令恢复数据库即可。详细教程参考: 19 MongoDB数据库(还未写博客内容)豆瓣数据集如下:豆瓣数据集}
series的使用from pandas import Series
#1. Series对象
x = Series(
data=['a','b','fef'], # 索引默认从0开始
index=['aa','bb','cc'] # 索引不一定是数字,索引可重复
)
# print(x)
#2.根据索引取值
print(x['cc'])
#3. 修改
x['aa']='dwdw'
#4. 删除
x = x.drop('cc')
#5.添加
x.append((Series(data=['dwd'],index=['r'])))
#6.获取x的所有索引和值
print(x.index,x.values)
dataframe的基本使用from pandas import DataFrame
df = DataFrame(
data={
'name':['张三','李四','王五'],
'age':[18,20,19],
'hobby':['唱歌','跳舞','rap']
},
index=['first','second','third']
)
print(df)
#1 获取name列数据
print(df['name'])
#2 df 想要筛选行列需要使用 loc-按标签选 iloc—按位置选 两个方法
# 遵循先行后列原则
# #3 筛选first行age列
df.loc['first','age'] #,分维度
#
# #4 只取行或列
print(df.loc[:,'age'])
#
# #5 筛选first行到thir行
print(df.loc['first':'third','name':'hobby'])
#
# #6 筛选不连续行列
print(df.loc[['first','third'],['name','hobby']])
# loc:如果知道列名使用loc 不知道列明用iloc
print(df.iloc[0:2,0:2]) #左闭右开
print(df.iloc[[0,2],[0,2]])
df写入csvfrom pandas import DataFrame
df = DataFrame(
data=[
{'name':'张三','age':12},
{'name':'栗子','age':18},
{'name':'王五', 'age':15}
]
)
#1. 写到csv文件中
#不写入索引与列名(表头)
df.to_csv('哈哈.csv',index=False,header=False)
pandas的基本处理方法示例数据链接import pandas as pd
1. 读取csv数据df = pd.read_csv('数据分析data/data.csv')
print(df)
2. 去重df.drop_duplicates(inplace=True) # inplace在原始数据上直接进行修改, 与赋值操作时一样的
print(df)
3 空值处理df = pd.read_csv('数据分析data/data1.csv')
df.dropna(inplace=True) #删除空值
# 填充空值
df.fillna('Not provide', inplace=True)
print(df)
4 某列数据的字符串操作(替换、去空格、切割等等)df = pd.read_csv('数据分析data/data2.csv')
# str: Series变为字符串属性之后,可用字符串的方法
# 将name列中的JIMI替换成TOM——str.replace
strip()去首尾空格
df['name'] = df['name'].str.replace('JIMI','TOM').str.strip()
print(df)
5 筛选数据df = pd.read_csv('数据分析data/data4.csv',sep='|')
print(df.columns)
#筛选comments大于等于10000的数据
print(df[df['comments']>=10000])
#筛选comments大于等于1000,小于等于10000的数据
print(df[(df['comments']>=1000) & (df['comments']<=10000)])
# 筛选comments小于等于1000或大于等于10000的数据
print(df[(df['comments']>=1000)
(df['comments']>=10000)])
# 筛选title中包含台电两字的数据 na=False:如果是空,直接是False
print(df[df['title'].str.contains('台电', na=False)])
6 数据合并from pandas import DataFrame
import pandas as pd
df1 = pd.read_csv('数据分析data/data6-1.csv',sep='|')
df2 = pd.read_csv('数据分析data/data6-2.csv',sep='|')
df3 = pd.read_csv('数据分析data/data6-3.csv',sep='|')
df = pd.concat([df1,df2,df3])
#6.1 竖向数据合并
# # print(df) #可以发现索引重复了,故我们重置索引reset_index
df.reset_index(inplace=True, drop=True) #drop把原索引删掉,重新生成索引
print(df)
#6.2 横向数据合并
df1 = pd.read_csv('数据分析data/data7-1.csv',sep='|', names=['id','comments','title'])
df2 = pd.read_csv('数据分析data/data7-2.csv',sep='|',names=['id','comments','title'])
# # on:根据谁合并(公共列)
df = pd.merge(df1,df2,on='id')
print(df)
#6.3 新增列
df = pd.read_csv('数据分析data/data8.csv',sep='|')
df['totalPrice'] = df['num']*df['price']
print(df)
分组聚合import
pandas as pd
df = pd.read_csv('数据分析data\groupby.csv')
#1 按address分组,求各城市人数
#res = df.groupby('address').count().reset_index() #按城市对所有列求个数
res1 = df.groupby('address')['id'].count().reset_index() #按城市对所有列求个数
#print(res1)
#2 按照address分组,求各城市的分数平均值
res2 = df.groupby('address')['score'].mean().reset_index()
#print(res2)
#3 根据address分组,求各城市的分数平均值、最大值、最小值、分数总和、中位数
# aggg:聚合运算
res3 = df.groupby('address')['score'].agg(['mean','max','min','sum','median']).reset_index()
print(res3)
#4 根据address分组,求各城市的分数平均值、[年龄最大值、最小值]
res4 = df.groupby('address').agg({'score':'mean','age':['max','min']}).reset_index()
print(res4)
import
pandas as pd
#1 读取数据
df = pd.read_csv('D:\python_project\python爬虫\chromedriver\lianjia_data.csv')
#2 根据小区分组,求单价平均值(当前小区同时在售卖房源不能低于3套)
temp = df.groupby('community')['unit_price'].agg(['mean','count']).reset_index()
# print(temp)
#3 [['小区',3.4]]
result = [
[
value['community'],
round(value['mean']/10000,1)
]
if value['count'] >= 3 else [value['community'],0]
for index,value in temp.iterrows()
]
# print(result)
#4 根据小区均价进行排序
# 参数1: 要排序数据if value['count'] >= 3 else [value['community'],0]
# 参数2 key: 根据什么排序
# 参数3:reverse=True
result = sorted(result,key=lambda x:x[1],reverse = True)[0:10]
# print(result)
}

我要回帖

更多关于 pandas groupby用法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信