Pandas学习笔记(未完)

一、pandas基本数据结构

1、Series对象

带索引数据构成的一维数组(将一组索引和一组数据绑定在一起)
将类型键映射至一组类型值

pd.Series(data,index = index)
#index为可选参数

获取Series对象数据:

values方法、index方法、标签索引
data = pd.Series([1,2,3.00,4,5.0])
data
–> 0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
dtype: float64
#values方法
data.values
–>array([1., 2., 3., 4., 5.])
#index方法
data.index
–>RangeIndex(start=0, stop=5, step=1)
#标签索引
data[0:3]
–>0 1.0
1 2.0
2 3.0
dtype: float64

series可定义索引
例:

data = pd.Series([1,2,3.00,4,5.0],index = [‘a’,‘b’,‘c’,‘d’,‘e’])
data
–>a 1.0
b 2.0
c 3.0
d 4.0
e 5.0
dtype: float64

注:Series为显式索引,索引可更改。Numpy数组为隐式索引,索引为整数索引,不可定义。

可以直接利用字典创建一个Series对象,字典的键自动创建为索引,值不变

Series可以利用索引筛选字典元素
例:

扫描二维码关注公众号,回复: 15853062 查看本文章

pd.Series({0:’ a ‘,1:’ b ‘,2:’ c '}, index = [0,2])
–>0 a
2 c
dtype: object
#Series对象会保留显式定义的键值对

2、DataFrame对象

可看作多维Series对象

pd.DataFrame(data, columns = columns , index = index)

例:

name = pd.Series({‘a’:1,‘b’:2,‘c’:3})
num = pd.Series([11,22,33],index = [‘a’,‘b’,‘c’])
data = pd.DataFrame({‘name’:name,‘number’:num})
data
–>
name number
a 1 11
b 2 22
c 3 33
#索引值需保持一致
#若索引不一致,则会出现问题:

num = pd.Series([11,22,33])
name = pd.Series({‘a’:1,‘b’:2,‘c’:3})
data = pd.DataFrame({‘name’:name,‘number’:num})
data
–>
name number
a 1.0 NaN
b 2.0 NaN
c 3.0 NaN
0 NaN 11.0
1 NaN 22.0
2 NaN 33.0

index属性、columns属性

#index属性
获取索引
data.index

Index([‘a’, ‘b’, ‘c’], dtype=‘object’)

#columns属性
data.columns

Index([‘name’, ‘number’], dtype=‘object’)

3、Index对象

可看作不可变数组
遵循标准库集合的多种用法,包括求交并集等
包含部分与NumPy数组相似属性,如:.size , .shape , .ndim , .dtype等

操作对象 特点
Serise对象 显式索引,可更改
DataFrame对象 显式索引,可更改
Index对象 索引不可更改

二、数据操作

1、数据取值与选择

取值

Series DataFrame
键值对映射 键值对映射
in操作 values属性(按行查看数据)
keys()
items()

选择
Series :索引器
直接使用索引,在索引为整数时切片操作默认使用隐式索引,取值操作默认使用显式索引

索引器 作用
loc 表示取值和切片都是显式的
iloc 表示取值和切片都是隐式的
ix 混合形式,等价于标准库列表取值

DataFrame:使用Series索引器,保留行列标签

2、数值运算

与Numpy通用函数使用方法类似
索引会自动对齐,索引合并方式类似求并集

DataFrame对象可以通过fill_value参数设置缺失值

3、缺失值

None:
是一个Python对象,只能用于Object数组类型,不能做Numpy/Pandas数组类型的缺失值
如果使用含None的数组进行运算会报错

NaN:
特殊浮点数
无论进行何种操作都会被同化为NaN
使用累计函数时不会报错,但输出会变为NaN
Numpy提供特殊累计函数,忽略缺失值计算,如:np.nansum() , np.nansin() …
例:

x = np.array([1,np.nan,3,4])
x.dtype

dtype(‘float64’)

x.sum()

nan

np.nansum(x)

8.0

注:pandas会将nan和none自动转化为nan

Pandas处理缺失值方法

isnull():返回一个由布尔类型组成的掩码数据

x = pd.Series([1,np.nan,3,None])
x.isnull()

0 False
1 True
2 False
3 True
dtype: bool

notnull():与isnull()相反

x.notnull()

0 True
1 False
2 True
3 False
dtype: bool

注: isnull(),notnull() 方法产生布尔数组,可做为索引选取非缺失数据或缺失数据

dropna():返回剔除缺失值后的数据

#Series对象
x.dropna()

0 1.0
2 3.0
dtype: float64

#DataFrame对象
y = pd.DataFrame([[1,np.nan,3,4],[5,6,None]])
#只能剔除整行或整列
#默认剔除整行
#axis参数设置
y.dropna()

Empty DataFrame
Columns: [0, 1, 2, 3]
Index: []

y.dropna(axis = ‘columns’) #此处axis = 1 结果相同

0
0 1
1 5

#通过how或thresh参数设置提出行或列的缺失值数量阈值

fillna():填充缺失值

#Series对象

#直接使用指定的值填充
x.fillna(number)
#使用缺失值前面的有效值向后填充(forward-fill)
x.fillna(method = ‘ffill’)
#向前填充
x.fillna(method = ‘bfill’)

#DataFrame对象

#设置axis参数

三、合并操作

1、Concat 和 Append操作

1、 pd.concat

语法类似于np.concatenate()

索引会保留:pd.concat 相比 np.concatenate ,pandas中的用法在索引相同时也会保留原数据索引值,而不会被合并。

针对该特性可进行的操作:

verify_integrity 参数
设置 verify_integrity = True 如果合并结果出现重复索引将会打印错误信

ignore_index 参数
设置为True 合并时将会为合并结果创建新的整数索引

key 参数
通过该参数 添加新的多级索引
 
 join 和 join_axes 参数
 交集合并 : join = 'inner'
 并集合并 : join = 'outer'

2、 append()方法

2、pd.merge()和df1.join(df2)

1、pd.merge()
该操作方法可以进行一对一,多对一,多对多连接操作

一对一情况:两DataFrame数据键不重复的情况下,会自动选择某一columns下的键进行忽略索引的合并

多对一情况:合并时会保留重复值并对相同键对应的数据内容进行重复填补

多对多情况:自动对齐相互填补

on参数
可设置为列名字符串或者包含多列名称列表进行指定合并填补操作

left_on 和 right_on 参数
合并列名不同的数据集,对多出一列相同的键,可用drop(‘name’,axis = )操作删除
参数设置为列名

left_index 和 right_index参数
合并列和索引
参数设置为True

how参数
数据连接方式
默认参数为 how = ‘inner’

参数 形式
inner 内连接,即求交集
outer 外连接,即求并集
left 左连接,以第一个参数为标准
right 右连接

该方法可以通过设置_index 和 _on 参数进行索引和列的混合使用

pd.merge(df1,df2,left_index = True, right_on = ’name’)
该操作同时进行合并和列名选择,保留right_on所选择的列名和位置

suffixes参数
自定义重复列名后缀

2、df1.join(df2)
直接按照索引进行数据合并,效果同上merge操作中的_index和_on参数

四、累计与分组

累计

累计函数,略

分组:GroupBy

1、groupby()

按列取值,返回一个groupby对象

df.groupby(‘column’)

2、累计:aggregate()

一次性计算所有累计值

df.groupby(‘key’).aggregate([‘min’,np.median,max]])

使用字典指定不同列的累计函数

df.groupby(‘key’).aggregate({‘data1’: ‘max’,‘data2’: ‘min’})

3、过滤:filter()

按照分组属性过滤某些值

例:

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

rng = np.random.RandomState(0)
df = pd.DataFrame({
    
    'key':['A','B','C','A','B','C'],
'data1':range(6),
'data2':rng.randint(0,10,6)},
 columns = ['key','data1','data2'])
 
print(df)
def filter_func(x):
	return x['data2'].std() >4
print('def')
print(filter_func)
print(df.groupby('key')['data2'].std())

print('df.groupby(''key'')')
print(df.groupby('key').std())
print('filter')

print(df.groupby('key').filter(filter_func)) 
#即:df.groupby('key'['data2'].std())

4、转换:transform()

猜你喜欢

转载自blog.csdn.net/qq_43842886/article/details/107939465
今日推荐