Pandas
Pandas基于Numpy构建,是数据分析的核心模块,可直接读取数据进行处理,兼容各种数据库,支持各种分析算法。因为之前了解到Python安装Pandas很慢,所以直接下载了Anaconda,感觉自己很机智哈哈哈!
因为各种镜像源都挂了,下载真的好慢,所以分享一个Anaconda3-5.1.0-Windows-x86_64网盘链接:https://pan.baidu.com/s/1Pj6Kmk6Tur3iMXLxxcRGJA
Series和DataFrame是Pandas中最主要的两种数据结构,个人抽象理解为带索引的一维数组和带索引的表格。
Series
Series类似一维数组,由带索引index的一组values构成,values可以是任何数据类型。可以将Series理解为带索引的ndarray,也可以将Series理解为有顺序的dict字典。
s.index可以查看索引,是pandas中所有对象都具有的属性,返回索引的生成器
s.values可以查看值,返回numpy.ndarray,默认数据类型是float64
name是数据表名称属性,可以看作数据表的表名
import numpy as np
import pandas as pd
ar=np.random.rand(10)
s=pd.Series(ar,name='Series s')
print(ar,type(ar))
print(s,type(s))
print('------------')
print(s.index)# index可以看做标签的生成器,所有pandas中的数据结构都有index
print(list(s.index),type(s.index))
print(s.values,type(s.values))#values实际上是numpy.ndarray
生成Series
-
公式
pd.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
index默认从0编号,可以自定义list,index可以不唯一,但尽量唯一
dtype与data的数据类型相同,一般默认float64 -
创建
Series可以通过字典、一维数组、标量来创建。
字典创建时,字典的key是Series的index,字典的values是Series的values。
一维数组创建时,自定义index必须和values长度相同。
标量创建时,index长度是values长度。
#用字典创建
dic={
'a':1,'b':2,'c':3}
s=pd.Series(dic)
print(s)
#用一维数组创建
ar=np.random.rand(5)*100
s=pd.Series(ar,index=list('abcde'))
print(s)
#标量创建
s=pd.Series(100,index=range(4))
print(s)
Series索引
和ndarray,list类似,可以使用位置下标、标签、切片、bool索引。
需要注意多个标签需要用s[[‘a’,‘b’]],索引顺序不一定要按照index顺序
# 位置下标
s=pd.Series(np.random.rand(5)*10,index=list('abcde'))
print(s)
print(s[0])#位置下标从0开始
print(s[3],type(s[3]),s[3].dtype)
# 不能被逆序排列print(s[-1])
#标签索引
print(s['a'])
print(s[['c','a']])#多个标签需要用[[]]表示列表,索引顺序不一定要按照series的顺序
#切片
print(s[1:3])#位置索引左闭右开,不含右侧边际
print(s['b':'d'])#index索引闭区间
print(s[:2])
#添加空值
# (None代表空值,NaN代表有问题的数值,两个都会识别为空值)
print('---------')
s['a']=None
print(s)
s[2]=np.nan
print(s)
#.isnull() 空值为Ture/ .notnull()非空为True
print(s.isnull())
print(s.notnull())
#bool型
print(s>3)
print(s[s>1])
print(s[s.isnull()])
print(s[s.notnull()])
Series基本操作
- 查看数据头尾
s.head() 查看数据头,默认查看5行,可赋值
s.tail(3) 查看数据尾,默认查看5行,可赋值 - 依据索引排序 s.reindex()
保留已有索引及对应value,增加不存在索引及对应values为空值NaN
# reindex 依据索引重新排序,而非重命名索引index,也增加index数目
s=pd.Series(np.random.rand(5))
print(s)
s1=s.reindex([0,2,1,'a','b'])#保留数据已有索引,不存在索引返回空值NaN
print(s1)
s2=s.reindex([0,2,1,'a','b','c'],fill_value=1)#保留数据已有索引,不存在索引返回fill_value
print(s2)
#将series作为参数调用Series无法改变原有对象索引
s3=pd.Series(s,index=list('abcde'))
print(s3)
#改变原有对象的索引
s.index=['a','b','c','d','e']
print(s)
'''
0 0.996371
1 0.274122
2 0.688167
3 0.813712
4 0.780905
dtype: float64
0 0.996371
2 0.688167
1 0.274122
a NaN
b NaN
dtype: float64
0 0.996371
2 0.688167
1 0.274122
a 1.000000
b 1.000000
c 1.000000
dtype: float64
a NaN
b NaN
c NaN
d NaN
e NaN
dtype: float64
a 0.996371
b 0.274122
c 0.688167
d