Pandas是基于NumPy的一个常用库。之所以如此,是因为不论是读取还是处理数据,用它都非常简单。
1,pandas基本数据结构
Pandas有两种自己独有的基本数据结构。
pandas虽然有两种数据结构,因为他是Python的一个库,所以Python的数据类型在这里依然适用,同样还可以使用类自己定义数据类型。
Pandas里面又定义了两种数据类型:
Series和
DataFrame
基本的导入方式:
from pandas import Series,DataFrame
import pandas as pd
1)Series介绍
Series如同列表一样,有一系列数据,每个数据对应一个索引值。
>>> a =
Series
([20,"hello","python","beijing"])
>>> a
0 20
1 hello
2 python
3 beijing
dtype: object
上面能看出来,Series就是“竖起来”的list
另外一点也很像列表,就是其中元素的类型由你任意决定
>>> a.
values
array([20, 'hello', 'python', 'beijing'], dtype=object)
>>> a.
index
RangeIndex(start=0, stop=4, step=1)
我们创建了一个Series对象,这个对象有其属性和方法。
a.values和
a.index两个属性依次可以显示Series对象的数据值和索引
列表的索引只能是从0开始的整数,在默认情况下,Series数据类型其索引也是如此。但区别于列表的是,Series可以
自定义索引:
>>> a1 =
Series
([20,"hello","python","beijing"],
index
=["age","title","name","addr"])
>>> a1
age 20
title hello
name python
addr beijing
dtype: object
每个元素都有了索引,就可以根据索引操作元素了。
根据索引
查看和
修改数值:
>>> a1["age"]
20
>>> a1["age"]= 18
>>> a1
age 18
title hello
name python
addr beijing
dtype: object
前面定义Series对象的时候,用的是列表,即Series()方法的参数中第一个列表就是其数据值,如果需要定义index,放在后面依然是一个列表。除了这种方法之外,还可以用下面的方法定义Series对象:
>>> s = {"java":7000,"python":8000,"zhangsan":18}
>>> s1 =
Series
(s)
>>> s1
java 7000
python 8000
zhangsan 18
dtype: int64
是不是有点类似数据字典(dict),这时候,索引依然可以自定义。如果自定义了索引,自定义的索引会自动寻找原来的索引。如果一样,就取原来索引对应的值,这个可以简称为“
自动对齐”。
>>> s2 =
Series
(s,index=["java","c++","python","zhangsan"])
>>> s2
java 7000.0
c++
NaN
python 8000.0
zhangsan 18.0
dtype: float64
于是其他能够“自动对齐”的照搬原值,没有的那个“c++”依然在新Series对象的索引中存在,并且自动为其赋值
NaN。在Pandas中,如果没有值,都对齐赋给NaN。
Pandas有专门的方法来判断值是否为空:
>>>
pd.isnull(s2)
java False
c++ True
python False
zhangsan False
dtype: bool
>>>
pd.notnull(s2)
java True
c++ False
python True
zhangsan True
dtype: bool
Series也有同样的方法:
>>>
s2.isnull()
java False
c++ True
python False
zhangsan False
dtype: bool
索引的名字也可以重新定义:
>>> s2.index = ["q1","q2","q3","q4"]
>>> s2
q1 7000.0
q2 NaN
q3 8000.0
q4 18.0
dtype: float64
对于Series数据,也可以做这样的运算:
>>> s3 =
Series
([3,6,9,5],index=["a","b","c","d"])
>>> s3
a 3
b 6
c 9
d 5
dtype: int64
>>>
s3[s3 > 5]
b 6
c 9
dtype: int64
>>>
s3 * 2
a 6
b 12
c 18
d 10
dtype: int64
这些操作直接在交互模式中进行就行。
注意:别忘记了最前面的引入Series,DataFrame和Pandas