pandas series取值_数据分析pandas的简单操作

为什么要用pandas呢?

166988c2ca29eaa8782d8a2728152940.png

numpy能够帮我们处理数值的数据,pandas除了处理数值以外还可以处理字符串,时间序列等数据类型;

正常我们还是主要用pandas来读取数据;以下是读取不同类型的文件:

pd.read_csv()
pd.read_excel()
pd.read_html()
pd.read_hdf()

读取数据后,我们说一下pd对数据的一些处理;

1.pandas的常用数据类型

series 一维,带标签的数组;

dataframe 二维,seiries的容器;

2.series

我们用一个字典来作为series创建data对象的内容;字典的键就作为series的索引了;

import pandas as pd
import string
dic={string.ascii_uppercase[i]:i for i in range(1,10)}#创建一个字典字母对应数字
data=pd.Series(dic)
print(data.shape)

查看一下data的维度:

(9,)

series的切片和索引:和序列的切片和索引相同;

print(data[[0,1,2,3]])
print(data[2:3])#切片
print(data[data<3])#布尔索引

结果:dtype就是数据的类型了;

B    1
C    2
D    3
E    4
dtype: int64

D    3
dtype: int64

B    1
C    2
dtype: int64

对于陌生的series对象

我们可以用index和values来查看他的索引和标签:

data.index
data.values

结果:

Index(['B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], dtype='object')

[1 2 3 4 5 6 7 8 9]

查看一下series索引和标签的类型

<class 'pandas.core.indexes.base.Index'>
<class 'numpy.ndarray'>

可以看到标签是一个numpy的ndarray类型,其实series可以看作由两个数组构成,可以对他们进行数组的一些操作;

3.Dataframe的基本属性:

dataframe对象既有行索引,又有列索引;

行索引:表示不同行;横向索引(index),0轴,aixs=0

列索引:表示不同列;纵向索引(column),1轴,axis=1

122a55ff5c36310d5f1b40b5875678bc.png

创建一个dataframe对象(用二维数组):创建时注意必须以二维数组作为输入,否则会报错;

data=pd.DataFrame(np.arange(1,21).reshape(4,5),index=list(range(2,6)),columns=['B','C','D','E','F'])
print(data.shape)
print(data)

结果:这里index=和columns=是对索引的自定义;

(4, 5)
    B   C   D   E   F
2   1   2   3   4   5
3   6   7   8   9  10
4  11  12  13  14  15
5  16  17  18  19  20

4.pandas的iloc和loc(这里主要说对dataframe的操作)

对于dataframe的数据我们不能用data[index,column]的形式来取值或者去修改了,如果这么做,pandas会自动加上一个新的索引名为[index,column],可以自己试一下!

对于dataframe形式的数据就要通过loc和iloc两种方法来用索引操作数据;

df.loc 通过标签索引行数据

df.iloc 通过位置获取行数据

data=pd.DataFrame(np.arange(1,21).reshape(4,5),index=[1,2,3,4],columns=['A','B','C','D','E'])
print(data.iloc[1:3,2:3])
print(data.loc[1:3,'B':'D'])#按照我指定的字母标签
print(data.iloc[1,3])#取第二行第四列

结果:

    C
2   8
3  13

    B   C   D
1   2   3   4
2   7   8   9
3  12  13  14

9

5.pandas对缺失值的处理:

pandas和numpy对缺失值的标志都是“NaN”:np.nan

判断数据是否为NaN:

print(pd.isnull(data))
print(pd.notnull(data))

对于没有任何一个元素是空的data,我们将得到如下的结果

       A      B      C      D      E
1  False  False  False  False  False
2  False  False  False  False  False
3  False  False  False  False  False
4  False  False  False  False  False
      A     B     C     D     E
1  True  True  True  True  True
2  True  True  True  True  True
3  True  True  True  True  True
4  True  True  True  True  True

对于缺失值的处理方式:(1)删除其所在的行或列(dropna)

(2) 用数据来填充空数据 (fillna)

删除所在行(列):

data=pd.DataFrame(np.arange(1,21).reshape(4,5),index=[1,2,3,4],columns=['A','B','C','D','E'])
data.iloc[1,3]=np.nan;#将该元素赋空值
print(data.dropna(axis=0,how='any',inplace=False))

结果:我们可以看到缺失值所在行被删除(参数axis=0,即0轴数据被删除)

    A   B   C     D   E
1   1   2   3   4.0   5
3  11  12  13  14.0  15
4  16  17  18  19.0  20

填充缺失值:这里我们例子用平均值来填充

print(data.fillna(data.mean()))#mean时求数据的平均值

结果

    A   B   C          D   E
1   1   2   3   4.000000   5
2   6   7   8  12.333333  10
3  11  12  13  14.000000  15
4  16  17  18  19.000000  20

6.pandas常用的统计方法:

mean 求数据平均值

join 合并数据

merge 合并数据

groupby 分组和聚合


这个博客园的Mr-chen写的join和merge的区别用法;

pandas.merge和DataFrame.join的用法区别 - Mr-chen - 博客园​www.cnblogs.com
e8979ce4dc4a8b70eae0547e311cb9bb.png

7.pandas的一些字符串方法

d000db8fc5e72dc47ac7f188e8b7dbca.png