pandas简单介绍

pandas内容简单介绍
1、创建对象以及二维表
创建对象,pd.Series(),类似一维数组。

import numpy as np
import pandas as pd

a = np.array([60, 89, 98])
a
#array([60, 89, 98])

b = pd.Series(a, index=['xiaoming', 'xiaohong', 'xiaohua'])
b
'''
xiaoming    60
xiaohong    89
xiaohua     98
dtype: int64
'''
#pd.Series(),创建pandas对象,第一个参数可以是数组,数列,字典;第二个参数是索引

pd.Series({'xiaoming':60, "xiaohong": 89})
'''
xiaoming    60
xiaohong    89
dtype: int64
'''
#第一个参数是字典时,字典的键是索引
#因此可以通过b.keys获得数据集b的索引,b.values获得数据集b的值。

创建二维表 DataFrame
行索引标签:index;列索引标签:columns

import numpy as np
import pandas as pd

s = pd.DataFrame([[60, 70, 80], [89, 78, 67]])
s
#```pd.DataFrame()的参数可以是数组,也可以是嵌套列表

#index修改
s.index = ['xiaohong', 'xiaoming']
#columns修改
s.columns = ['chinese', 'math', 'english']

#创建二维表时,就一步到位
s = pd.DataFrame([[60, 70, 80], [89, 78, 67]], index=['xiaohong', 'xiaoming'], 
                 columns=['chainese', 'math', 'englishe'])
#这是横、列索引,数据分开表示进行创建的。
pd.DataFrame({'chinese':[60, 89], 'math':[70, 78], 'english':[80, 67]},
            index=['xiaohong', 'xiaoming'])
#列索引是字典的键,行索引是index内容,字典的值是数据  

2、series对象以及dataframe对象的索引和切片
series对象的索引和切片

import numpy as np
import pandas as pd

s = pd.Series([90, 89, 88, 87, 86], index=['zhang', 'wang', 'li', 'zhao', 'sun'])
s
"""
zhang    90
wang     89
li       88
zhao     87
sun      86
dtype: int64
"""
#索引
s['zhang']
#90
#修改数据
s['zhang'] = 100
s['zhang']
#100
#列表索引,返回的是数据+索引标签
s[['zhang', 'wang']]
'''
zhang    100
wang      89
dtype: int64
'''
#条件索引,是关于数据的条件,返回符合条件的数据+索引标签
s[s>88]
'''
zhang    100
wang      89
dtype: int64
'''
#遇到索引标签是数字的,使用.loc(标签索引)和.iloc(位置索引)
ts = pd.Series(np.random.randn(4), index=[1, 3, 5, 7])
ts
'''
1   -1.252808
3   -0.242042
5    0.351943
7    0.001299
dtype: float64
'''
ts.iloc[1]
#-0.2420420593474746
ts.loc[1]
#-1.2528078199896817

'zhang' in s
#True
#确认数据是否在数据集中,返回布尔值。

s.items()
#<zip at 0x11ecd4348>
list(s.items())
#[('zhang', 90), ('wang', 89), ('li', 88), ('zhao', 87), ('sun', 86)]
#返回是键值对

#标签切片,返回标签+数据
ts.loc[1:3]
'''
1   -1.252808
3   -0.242042
dtype: float64
'''
#位置切片
ts.iloc[1:3]
'''
3   -0.242042
5    0.351943
dtype: float64
'''

dataframe对象的索引和切片

import numpy as np
import pandas as pd  
df = pd.DataFrame({'chinese': [90, 89, 87, 86, 85], 'math': [34, 35, 36, 37, 38]},
                 index=['zhang', 'wang', 'li', 'zhao', 'sun'])
#列索引
df['math']
'''
zhang    34
wang     35
li       36
zhao     37
sun      38
Name: math, dtype: int64
'''
#返回的行索引标签+数据,[]中的参数只能是列索引标签

#行索引
df.loc['zhang']
'''
chinese    90
math       34
Name: zhang, dtype: int64
'''
#如果是需要索引行内容,则使用.losc[行索引标签]
#返回列索引标签+数据
#修改数据
df['english'] = [56, 57, 58, 59, 60]
df.loc['zhang'] = [88,38]

#条件索引
df.loc[df['chinese']>88]
#返回二维表
'''
       chinese	math
zhang	90	    34
wang	89	    35
'''
df.values
'''
array([[90, 34],
       [89, 35],
       [87, 36],
       [86, 37],
       [85, 38]])
'''
#返回表中数据,以数组形式返回

#行标签切片
df.loc['zhang':'li']
#列标签切片
df.loc[:,'chinese': 'math']
#输出选中列
df.loc[:,'chinese', 'math']
#输出选中行中的某几列,选中行标签为'张'的行中的'chinese', 'english'两列数据
df.loc['zhang', ['chinese', 'english']]
'''
chinese    90
english    56
Name: zhang, dtype: int64
'''

3、从文件中读取数据,举例csv

import numpy as np
import pandas as pd

gdp = pd.read_csv("文件路径")
gdp
pd.read_csv(文件路径, names = ['CITY', 'GDP', 'POP'], skiprows=[0], index_col=0)
#可以自己修改行列标签索引,修改列索引标签时使用'name'参数,
#skiprows=[0]      #去除掉某一行
#index_col=0       #以0列当行索引标签
gdp.set_index('City_Name')
#将'City_Name'这一列设置为行索引标签

4、分组运算

import numpy as np
import pandas as pd

gdp = pd.read_csv("文件路径")
city_gdp = gdp.set_index('City_Name')
city_gdp.mean()
#求每一列的平均值
city_gdp.mean(axis=1)
#求每一行的平均值,1轴表示横行
city_gdp.describe()
#表示每一数列的某些值,比如,数量,平均值,标准差,最小值,最大值等等

GroupBy可以分解为三个步骤:

Splitting: 把数据按主键划分为很多个小组
Applying: 对每个小组独立地使用函数
Combining: 把所得到的结果组合

Splitting 由 groupby 实现
Applying 由 agg、apply、transform、filter实现具体的操作
Combining 由 concat 等实现

df.groupby('subject').sum()
#groupby的参数是列索引坐标+.计算方法
df.groupby(['teacher', 'subject']).mean()
#如果是多个参数,使用列表
df.groupby(['teacher', 'subject'])['score'].mean()
#计算方法的数据是'score'列

df_3.groupby("name", sort=False).score.apply(lambda x: x.sum())
df_3.groupby("name", sort=False).agg({"score": [np.sum, np.max, np.min]})
#apply只能一次同时对多个列调用同一个函数;agg可以对多个列单独的调用不同的函数。
df_2.groupby("X").transform(lambda x: x + 1)
#transform作用于数据框自身,并且返回变换后的值。
#返回的对象和原对象拥有相同数目的行,但可以扩展列。
#注意返回的对象不是就地修改了原对象,而是创建了一个新对象。也就是说原对象没变
#返回一个类似于数组的序列,且对每一个组,依次在每一列上调用函数。
df_9.groupby('A').filter(lambda x: x['B'].mean() > 3.)
#filter是一个过滤器,是一个组内方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值