pandas入门:Series, DataFrame

pandas包含的数据结构和数据处理工具是设计,使得在python中的进行数据清洗和分析非常快捷。pandas经常和其他数值计算工具,比如numpy scipy,以及数据可视化工具 matplotlib一起使用。

尽管pandas采用了很多 numpy 的代码风格,但是pandas是用来处理表格型或异质性数据的。numpy 更适合同质型的数值类数组数据。

为了入门pandas,需要熟悉两个常用的的工具数据结构: Series 和 DataFrame。这为大多数的应用提供了一个有效易用的基础。

Series

这是一种一维的数组型对象,包含了一个值序列(与numpy 中的类型类似),并且包含了数组标签,称为索引。最简单的序列具有仅仅有一个数组组成:

obj=pd.Series([1,2,3,4,5])
obj
0    1
1    2
2    3
3    4
4    5
dtype: int64

print(obj.values,obj.index)
[1 2 3 4 5] RangeIndex(start=0, stop=5, step=1)

obj2=pd.Series([1,2,3,4],index=['a','b','c','d']) # 通常需要创建一个索引序列,用标签标识每个数据带你
obj2.index
Index(['a', 'b', 'c', 'd'], dtype='object')

obj2[['c','b']]          # 使用标签来进行索引,
c    3
b    2
dtype: int64

使用 numy 的函数,或者是布尔值数组来过滤,与标量的运算,应用数学函数等,都会保留索引值链接,series 可以看作一个长度固定且有序的字典,索引值与数据值配对,'b' in obj2 >>> True

np.exp(obj2)
a     2.718282
b     7.389056
c    20.085537
d    54.598150
dtype: float64

data={'Ohio':35000,'texas':71000,'oregon':16000}
obj3=pd.Series(data)          # 可以使用字典生成一个 Series.
obj3 
Ohio      35000
texas     71000
oregon    16000
dtype: int64

state = ['california','texas','Ohio']        # 自定键的顺序传递给构造函数
obj4=pd.Series(data,state)
california        NaN          # 没有匹配值就是NaN
texas         71000.0
Ohio          35000.0
dtype: float64

NaN 是pandas中标记缺失值或NA 值的方式,表示缺失数据。pandas中使用isnull 和 notnull 函数来检擦缺失数据。

pd.isnull(obj4)          # obj4.isnull() 也一样。
california     True
texas         False
Ohio          False
dtype: bool

serise 对象自身何其索引都有name属性,这个特性和pandas 其他重要功能集合在一起:

obj4.name='我是对象'
obj4.index.name='我是索引'
obj4
我是索引
california        NaN
texas         71000.0
Ohio          35000.0
Name: 我是对象, dtype: float64

obj4.index=[1,2,3]           # 通过按位置赋值的方式改变索引,,name属性自然也改变
obj4
1        NaN
2    71000.0
3    35000.0
Name: 我是对象, dtype: float64

DataFrame

表示矩阵的数据表,包含已排序的列集合,每一列可以是不同的值类型(整形,浮点型,布尔值)。dataframe 既有行索引,又有列索引,可以视为一个共享相同索引的 series 的字典。在 dataframe 中,数据被存储为一个以上的二维块,而不是列表,字典或其他一位数组的集合。

有多种方式构建 dataframe ,最常用的方式是利用包含等长度列表或numpy 数组的字典来形成dataframe 。

data={
    'state':['ohio','ohio','ohio','nevada','nevada','nevada'],
    'year':[2000,2001,2002,2001,2002,2003],
    'pip':[1.5,1.7,3.6,2.4,2.9,3.2]
}
frame=pd.DataFrame(data,columns=['year','state','pip']) # 将列按这个顺序排列
frame                        # 产生的 dataframe 会自动为sereies 分配索引,并且会按照排序的顺序排列
    year	state	pip
0	2000	ohio	1.5
1	2001	ohio	1.7
2	2002	ohio	3.6
3	2001	nevada	2.4
4	2002	nevada	2.9
5	2003	nevada	3.2            # 对于大型dataframe  frame.head()方法只会选出头部的五行,

frame.colums
Index(['year', 'state', 'pip'], dtype='object')




frame['state']   # 可以按字典型标记或属性那样检索series。等价于 frame.state
0      ohio
1      ohio
2      ohio
3    nevada
4    nevada
5    nevada
Name: state, dtype: objec # frame[colunm]对任意列名都有效,但是frame.column 只在列名是有效的python变量时才有效

frame=pd.DataFrame(data,columns=['year','state','pip','debt'])

    year	state	pip	debt        # 当传入的列不在字典中,结果就是缺失值。
0	2000	ohio	1.5	NaN
1	2001	ohio	1.7	NaN
2	2002	ohio	3.6	NaN
3	2001	nevada	2.4	NaN
4	2002	nevada	2.9	NaN
5	2003	nevada	3.2	NaN


# 列的引用是可以修改的,例如,这个空的 debt 列可以赋值为标量值,或者值数组
# 从 dataframe 中选取的列时数据的视图,对 series 的修改会映射到数据表中,如果需要复制,使用 series 的copy 方法
frame['debt']=16.5
frame
	year	state	pip	debt
0	2000	ohio	1.5	16.5
1	2001	ohio	1.7	16.5
2	2002	ohio	3.6	16.5
3	2001	nevada	2.4	16.5
4	2002	nevada	2.9	16.5
5	2003	nevada	3.2	16.5
frame['debt']=np,arange(6)       # 当讲列表或数组赋值给了一个列时,值得长度必须和dataframe 的长度匹配。




# 如果你将series 赋值给一列时,series 的索引将会按照dataframe 的索引重新排列,并在空缺的部分填充缺失值。
val = pd.Series([1.2,1.5,1.7],index=[0,1,9])
frame['debt'] = val
	year	state	pip	debt         # 索引有不匹配的就舍弃了。
0	2000	ohio	1.5	1.2
1	2001	ohio	1.7	1.5
2	2002	ohio	3.6	NaN
3	2001	nevada	2.4	NaN
4	2002	nevada	2.9	NaN
5	2003	nevada	3.2	NaN




frame['eastern'] = frame.state=='ohio'            # 添加一行布尔值类型的
frame                      # frame.eastern 无法创建新的列,因为没有这个变量

    year	state	pip	debt	eastern
0	2000	ohio	1.5	1.2	True
1	2001	ohio	1.7	1.5	True
2	2002	ohio	3.6	NaN	True
3	2001	nevada	2.4	NaN	False
4	2002	nevada	2.9	NaN	False
5	2003	nevada	3.2	NaN	False

del frame['eastern']          # 移除列
	year	state	pip	debt
0	2000	ohio	1.5	1.2
1	2001	ohio	1.7	1.5
2	2002	ohio	3.6	NaN
3	2001	nevada	2.4	NaN
4	2002	nevada	2.9	NaN
5	2003	nevada	3.2	NaN

。。。有点长。。。别看烦了。。。

另一种常用的数据形式时包含字典的嵌套字典。

pop={'nevade':{2001:2.4,2002:2.9},
    'ohio':{2000:1.5,2001:1.7,2002:3.6}}
frame=pd.DataFrame(pop)
frame

      nevade	ohio
2001	2.4	1.7
2002	2.9	3.6
2000	NaN	1.5

frame.T                      # 类似numpy 的语法进行转置。
	2001	2002	2000
nevade	2.4	2.9	NaN
ohio	1.7	3.6	1.5

frame=pd.DataFrame(pop,index=[2000,2002,2003])  # 内部字典的键被联合,如果显示的指名索引,内部字典的键将不会被排序
frame

      nevade	ohio
2000	NaN	1.5
2002	2.9	3.6
2003	NaN	NaN
 

pdata={'ohio':frame['ohio'][:], # 包含serise 的字典也可以用于构造dataframe。构造函数的有效输入可以去看看下面那个表
      'nevade':frame['nevade'][:2]}      # 索引以大的来
pd.DataFrame(pdata)
    ohio	nevade
2000	1.5	NaN
2001	1.7	2.4
2002	3.6	2.9


frame.index.name='year'  # 有name属性的也会显示
frame.columns.name='state'
frame
state	nevade	ohio
year		
2001	2.4	1.7
2002	2.9	3.6
2000	NaN	1.5


# dataframe 的 values 属性将包含在dataframe 中的数据以二维 ndarray 的形式返回
frame.values
array([[2.4, 1.7],
       [2.9, 3.6],
       [nan, 1.5]])

# dataframe 的列时不同的 dtype ,则values 的 dtype 会自动选择合适所有列的类型,比如object 什么的

在这里插入图片描述

哎。。。。写的我自己都不愿意在看一次了,,,,,,

猜你喜欢

转载自blog.csdn.net/weixin_46192930/article/details/106419614