一、pandas是什么?
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、为什么要学习pandas?
numpy能够帮我们处理数值型数据,但是这还不够。很多时候,我们的数据除了数值之外,还有字符串、时间序列等。
三、pandas常用数据类型
Series:一维,带标签数组
Series对象本质上由两个数组构成,一个数组构成对象的键(index,索引),一个数组构成对象的值(values),键→值。
ndarray的很多方法都可以运用于series类型,比如argmax,clip
series具有where方法,但是结果和ndarray不同。
(1)pandas之Series创建
import string
import pandas as pd
import numpy as np
# (1)通过数值创建
In [8]: t = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10]))
In [9]: t
Out[9]:
A 0
B 1
C 2
D 3
E 4
F 5
G 6
H 7
I 8
J 9
dtype: int32
# 查看数据格式
In [10]: type(t)
Out[10]: pandas.core.series.Series
# 查看数据类型
In [11]: t.dtype
Out[11]: dtype('int32')
# 更改数据类型
In [14]: t.astype(float)
Out[14]:
A 0.0
B 1.0
C 2.0
D 3.0
E 4.0
F 5.0
G 6.0
H 7.0
I 8.0
J 9.0
dtype: float64
# (2)通过字典创建
In [9]: temp_dict={"name":"xiaohong","age":30,"tel":10086}
In [10]: a = pd.Series(temp_dict)
In [11]: a
Out[11]:
name xiaohong
age 30
tel 10086
dtype: object
# 查看数据类型
In [12]: a.dtype
Out[12]: dtype('O')
(2)pandas之Series切片和索引
In [15]: t.astype(int)
Out[15]:
A 0
B 1
C 2
D 3
E 4
F 5
G 6
H 7
I 8
J 9
dtype: int32
In [16]: t[[1]]
Out[16]:
B 1
dtype: int32
In [17]: t[2:10:2]
Out[17]:
C 2
E 4
G 6
I 8
dtype: int32
In [18]: t[t>4]
Out[18]:
F 5
G 6
H 7
I 8
J 9
dtype: int32
In [19]: t['F']
Out[19]: 5
In [21]: t[['A','F']]
Out[21]:
A 0
F 5
dtype: int32
DataFrame:二维,Series容器
DataFrame对象既有行索引,又有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表明不同列,纵向索引,叫columns,1轴,axis=1
(1)pandas之DataFrame的创建
# (1)通过numpy对象创建
In [29]: pd.DataFrame(np.arange(12).reshape((3,4)),index=list("abc"),columns=list("WXYZ"))
Out[29]:
W X Y Z
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
# (2)通过字典创建
In [22]: d = {"name":["xiaoming","xiaohong"],"age":[20,32],"tel":[10086,10010]}
In [23]: pd.DataFrame(d)
Out[23]:
name age tel
0 xiaoming 20 10086
1 xiaohong 32 10010
# (3)通过列表创建
In [24]: e = [{"name":"xiaohong","age":32,"tel":10010},{"name":"xiaogang","tel":10000},{"name":"xiaowang","age":22}]
In [25]: pd.DataFrame(e)
Out[25]:
name age tel
0 xiaohong 32.0 10010.0
1 xiaogang NaN 10000.0
2 xiaowang 22.0 NaN
pd.DataFrame(d)
(2)pandas之DataFrame的描述信息
基础属性 | 描述 |
---|---|
df.shape | 行数 列数 |
df.dtypes | 列数据类型 |
df.nidm | 数据维度 |
df.index | 行索引 |
df.columns | 列索引 |
df.values | 对象值,二维ndarray数组 |
常用查询 | 描述 |
---|---|
df.head(3) | 显示头部几行,默认5行 |
df.tail(3) | 显示末尾几行,默认5行 |
df.info() | 相关信息浏览:行数、列数、列索引列非空值个数、列类型,内存占用 |
df.describe() | 快速综合统计结果:计数、均值、标准差、最大值、四分位数、最小值 |
(3)pandas之loc与iloc
- df.loc 通过标签索引行数据
- df.iloc 通过位置获取行数据
In [29]: t = pd.DataFrame(np.arange(12).reshape((3,4)),index=list("ABC"),columns=list("WXYZ"))
In [30]: t
Out[30]:
W X Y Z
A 0 1 2 3
B 4 5 6 7
C 8 9 10 11
⭕ 索引数据
通过loc索引
In [31]: t.loc["A","W"]
Out[31]: 0
In [32]: t.loc["A",["W","Z"]]
Out[32]:
W 0
Z 3
Name: A, dtype: int32
In [34]: t.loc[["A","C"],["W","Z"]]
Out[34]:
W Z
A 0 3
C 8 11
# 冒号在loc里是闭合的
In [35]: t.loc["A":"C",["W","Z"]]
Out[35]:
W Z
A 0 3
B 4 7
C 8 11
iloc索引
In [37]: t.iloc[1:3,[2,3]]
Out[37]:
Y Z
B 6 7
C 10 11
⭕ 赋值操作
In [38]: t
Out[38]:
W X Y Z
A 0 1 2 3
B 4 5 6 7
C 8 9 10 11
# loc操作
In [39]: t.loc["A","Y"]=100
In [41]: t
Out[41]:
W X Y Z
A 0 1 100 3
B 4 5 6 7
C 8 9 10 11
# iloc操作
In [42]: t.iloc[1:2,0:2]=200
In [43]: t
Out[43]:
W X Y Z
A 0 1 100 3
B 200 200 6 7
C 8 9 10 11
四、pandas之缺失数据
- 判断数据是否为NaN
pd.isnull(df)
pd.notnull(df) - 缺失数据的处理
删除NaN所在的行列:dropna(axis=0, how=‘any’, inplace=False)
填充数据:t.fillna(t.mean())
t.fillna(t.median())
t.fillna(0)
In [46]: t
Out[46]:
W X Y Z
A 0.0 1.0 NaN 3
B NaN NaN 6.0 7
C 8.0 9.0 10.0 11
# any指当某一行存在NaN时,删除此行
In [47]: t.dropna(axis=0,how='any')
Out[47]:
W X Y Z
C 8.0 9.0 10.0 11
# all指当某一行全部为NaN时,才删除此行
In [48]: t.dropna(axis=0,how='all')
Out[48]:
W X Y Z
A 0.0 1.0 NaN 3
B NaN NaN 6.0 7
C 8.0 9.0 10.0 11