1:pandas简介

Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

2:Series和DataFrame()

1:Series:是一种类似于一维数组的对象,由下面两个部分组成:

Values:一组数据值(ndarray)类型

Index:相关的数据索引标签、

2:Series的创建方法

(1)由列表和numpy数组创建

>>> s=Series([1,3,4,5])

>>> s

0    1

1    3

2    4

3    5

dtype: int64

>>> #会自动将索引打印出来

>>> s.index=list('abcd')

>>> s

a    1

b    3

c    4

d    5

dtype: int64

>>> #使索引变成了字母abcd

>>> s = Series([1,2,3,4],index=['mike','sana','luna','la'])

>>> s

mike    1

sana    2

luna    3

la      4

dtype: int64

>>> #Series里面的数据是一维的

(2)由字典创建

>>> #Series里面的数据是一维的

>>> s1=Series({'a':1,'b':2})

>>> s1

a    1

b    2

dtype: int64

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

3:Series的索引

(1)显示索引

>>> s=Series(np.random.random(10),index=list('abcdefghig'))

>>> s

a    0.370897

b    0.993346

c    0.148304

d    0.456316

e    0.365877

f    0.424124

g    0.685219

h    0.694954

i    0.563674

g    0.982072

dtype: float64

>>> s['a']#使用index作为索引值

0.37089735452082695

>>> s.loc['a']#使用,loc方法显示获取索引

0.37089735452082695

>>> s[0]

0.37089735452082695

>>> s.loc[0]#因为是显示索引会报错

Traceback (most recent call last):

File "<pyshell#59>", line 1, in <module>

s.loc[0]#因为是显示索引会报错

>>> s.iloc[0]

0.37089735452082695

>>> #因为此时是隐式索引所以不会报错,,隐式索引默认为0,1,2.......

>>> s.loc['a':'e']

a    0.370897

b    0.993346

c    0.148304

d    0.456316

e    0.365877

dtype: float64

>>> #切片处理

>>>

Series的基本概念

可以把Series看成一个定长的有序字典

可以通过shape,size,index,values,,等得到series的属性

>>> s.shape

(10L,)

>>> s.size

10

>>> s.index

Index([u'a', u'b', u'c', u'd', u'e', u'f', u'g', u'h', u'i', u'g'], dtype='object')

>>> s.values

array([0.37089735, 0.99334641, 0.14830394, 0.45631575, 0.36587742,

0.42412389, 0.68521869, 0.69495357, 0.56367448, 0.98207233])

>>> #Series,values,就是一个ndrray包含关系,升级的关系,有了索引更方便

>>> s.shape

(10L,)

>>> s.head

<bound method Series.head of a    0.370897

b    0.993346

c    0.148304

d    0.456316

e    0.365877

f    0.424124

g    0.685219

h    0.694954

i    0.563674

g    0.982072

dtype: float64>

>>> s.tail

<bound method Series.tail of a    0.370897

b    0.993346

c    0.148304

d    0.456316

e    0.365877

f    0.424124

g    0.685219

h    0.694954

i    0.563674

g    0.982072

dtype: float64>

>>> #Series对象本身实例有一个name属性

>>> s.name="列名"

>>> s

a    0.370897

b    0.993346

c    0.148304

d    0.456316

e    0.365877

f    0.424124

g    0.685219

h    0.694954

i    0.563674

g    0.982072

Name: ????, dtype: float64

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、’

4:Series的运算

>>> s.add(10,fill_value=0)#在进行算数运算时,如果包含nan ,那么fill_value默认设置为fill_value值

a    10.370897

b    10.993346

c    10.148304

d    10.456316

e    10.365877

f    10.424124

g    10.685219

h    10.694954

i    10.563674

g    10.982072

Name: ????, dtype: float64

>>> #Series之间的运算

>>> s1=Series([2,4,7,9],index=[0,1,2,3])

>>> s2=Series([1,2,3,4],index=[2,3,4,5])

>>> s1+s2#Series索引值,进行相加时,就是索引值进行相加

0     NaN

1     NaN

2     8.0

3    11.0

4     NaN

5     NaN

dtype: float64

>>> #要保留所有的index,必须使用.add()函数

>>> s1.add(s2,fill_value=0)

0     2.0

1     4.0

2     8.0

3    11.0

4     3.0

5     4.0

dtype: float64

>>> s1.add(s2)

0     NaN

1     NaN

2     8.0

3    11.0

4     NaN

5     NaN

dtype: float64

>>> #因为不同的Series存在不同的索引值,所以当对应另一个Series不存在该索引时要把fill_value定义为0

>>> s=Series([1,2,None])

>>> nd=np.array([1,2,None])

>>> s.sum()

3.0

>>> nd.sum()#会报错,因为有非数字,没办法进行计算

Traceback (most recent call last):

File "<pyshell#89>", line 1, in <module>

nd.sum()#会报错,因为有非数字

File "E:\Python\lib\site-packages\numpy\core\_methods.py", line 32, in _sum

return umr_sum(a, axis, dtype, out, keepdims)

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

>>> #ndarray中如果有nan,没有办法进行计算,而Series可以

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

5:DataFrame的定义

DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】公用一个索引。DataFrame由按一定顺序排列的多列数据。设计初衷是将Series的使用场景从一维扩展到多维,DataFrame既有行索引,也有列索引

行索引:index

列索引:column

值:values(numpy的二维数组)

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

6:DataFrame的创建:

最常用的方法是由一个字典来创建,DataFrame以字典的建作为每一{列}的名称。以字典的值作为每一列

此外,dataframe和Series一样会自动为每一行加索引,相应值为nan

>>> df= DataFrame({'height':[175,180,169,188],'age':np.random.randint(18,25,size=4),'sex':['boy','girl','boy','girl']})

>>> df

age  height   sex

0   22     175   boy

1   20     180  girl

2   22     169   boy

3   20     188  girl

>>> df= DataFrame({'height':[175,180,169,188],'age':np.random.randint(18,25,size=4),'sex':['boy','girl','boy','girl']},index=list('ABCD'),columns=['height','age','sex','weight'])

>>> df

height  age   sex weight    #weight默认为nan

A     175   19   boy    NaN

B     180   23  girl    NaN

C     169   21   boy    NaN

D     188   18  girl    NaN

>>> df.shape

(4, 4)

>>> df.values

array([[175L, 19, 'boy', nan],

[180L, 23, 'girl', nan],

[169L, 21, 'boy', nan],

[188L, 18, 'girl', nan]], dtype=object)

>>> df.columns

Index([u'height', u'age', u'sex', u'weight'], dtype='object')

>>> df.index

Index([u'A', u'B', u'C', u'D'], dtype='object')

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

7:DataFrame的索引

(1)对列进行索引

。通过类似字典的方式

。通过属性的方式

>>> df['age']

A    19

B    23

C    21

D    18

Name: age, dtype: int32

>>> #检索列返回值是Series

>>>

>>> df.age

A    19

B    23

C    21

D    18

Name: age, dtype: int32

>>> #对于DataFrame,列名,就相当于属性,

>>> #DataFrame是统计数据时,用的表格,某一个事物属性,每个属性对应Dataframe列名

>>> df['A']#该方法无法检索行,会报错

>>> #使用.loc[]加index来进行索引

>>> #使用.ix[]来进行索引,(过时)

>>> #使用iloc[]加整数来进行索引

>>> #对于行进行索引,返回值也是Series

>>> df.loc[['A','B']]

height  age   sex weight

A     175   19   boy    NaN

B     180   23  girl    NaN

>>> #!!!['A','B'],如果检索多行,返回的数据就是DataFrame

>>> df.loc['A':'C']

height  age   sex weight

A     175   19   boy    NaN

B     180   23  girl    NaN

C     169   21   boy    NaN

>>> #从A到C左闭右闭

>>> df['height':'age']#对列是不可以进行切片的

Empty DataFrame

Columns: [height, age, sex, weight]

Index: []

>>> df.iloc[1:3]#隐式索引

height  age   sex weight

B     180   23  girl    NaN

C     169   21   boy    NaN

>>> #左开右闭

#!!!,DataFrame自身有bug,索引是汉字,有时无法检索

>>> df['sex']#直接用中括号时,索引表示的是列索引,切片表示的是行切片

A     boy

B    girl

C     boy

D    girl

Name: sex, dtype: object

>>> df['sex']['A':'B']

A     boy

B    girl

Name: sex, dtype: object

>>> df['sex']['A':'B']=['男','女']

>>> df

height  age   sex weight

A     175   19    ??    NaN

B     180   23     ?    NaN

C     169   21   boy    NaN

D     188   18  girl    NaN

>>> df.loc['C','height']

169

>>> #检索行的时候,参数可以是多个

>>> #但是列无法完成该类型的操作

>>> df.values[0,2]

'\xc4\xd0'

>>> '\xc5\xae'#通过坐标进行检索

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

8:DataFrame的计算

de1=DataFrame(np.random.randint(0,150,size=(5,4)),index=['A','B','C','D','E'],columns=['a','b','c','e'])

>>> de1

a    b    c    e

A  113  143   22   28

B  102  120   80  144

C   37   36  120   80

D  134   82   65   96

E   49   51   46   23

>>> de2=DataFrame(np.random.randint(0,150,size=(4,4)),index=['A','B','C','D'],columns=['a','b','c','e'])

>>> de2

a   b   c    e

A   35  13  90   11

B   58  63  59   38

C   18  56  49  111

D  142  24  29   33

>>> de2.add(de1)

a      b      c      e

A  148.0  156.0  112.0   39.0

B  160.0  183.0  139.0  182.0

C   55.0   92.0  169.0  191.0

D  276.0  106.0   94.0  129.0

E    NaN    NaN    NaN    NaN

>>> de2.add(de1,fill_value=0)

a      b      c      e

A  148.0  156.0  112.0   39.0

B  160.0  183.0  139.0  182.0

C   55.0   92.0  169.0  191.0

D  276.0  106.0   94.0  129.0

E   49.0   51.0   46.0   23.0

>>> #fillvalue=0可以避免出现nan的情况

>>> de1+de2

a      b      c      e

A  148.0  156.0  112.0   39.0

B  160.0  183.0  139.0  182.0

C   55.0   92.0  169.0  191.0

D  276.0  106.0   94.0  129.0

E    NaN    NaN    NaN    NaN

>>> de1=DataFrame(np.random.randint(0,150,size=(3,3)),index=['A','B','C'],columns=['a','b','c'])

>>> de1

a    b    c

A  140    4  101

B  120  101  127

C  127   71   91

>>> de2

a   b   c    e

A   35  13  90   11

B   58  63  59   38

C   18  56  49  111

D  142  24  29   33

>>> de1.add(de2)

a      b      c   e

A  175.0   17.0  191.0 NaN

B  178.0  164.0  186.0 NaN

C  145.0  127.0  140.0 NaN

D    NaN    NaN    NaN NaN

>>> #无论是行索引还是列索引缺少了都要加NaN

>>> de1['a'].loc['A']=100

>>> de1

a    b    c

A  100    4  101

B  120  101  127

C  127   71   91

>>> de1['a']

A    100

B    120

C    127

Name: a, dtype: int32

>>> s1=de1['a']

>>> s1+de1

A   B   C   a   b   c

A NaN NaN NaN NaN NaN NaN

B NaN NaN NaN NaN NaN NaN

C NaN NaN NaN NaN NaN NaN

>>> #对s1因为是Series索引是A,B,C,对于de1索引是a,b,c

>>> s2=de1.loc['A']

>>> s2

a    100

b      4

c    101

Name: A, dtype: int32

>>> s2+de1

a    b    c

A  200    8  202

B  220  105  228

C  227   75  192

>>> #列索引相同所以可以相加

>>> s2.index

Index([u'a', u'b', u'c'], dtype='object')

>>> de1.columns

Index([u'a', u'b', u'c'], dtype='object')

>>>

Python提供的函数:

+                     add()

-                       sub(),或者multily()

*                      mul(),multiply()

/                        truediv(),div(),divide()

//                         floordiv()

%                        mod()

**                         pow()

>>> ss=de1['a']

>>> ss

A    100

B    120

C    127

Name: a, dtype: int32

>>> de1.add(ss)

A   B   C   a   b   c

A NaN NaN NaN NaN NaN NaN

B NaN NaN NaN NaN NaN NaN

C NaN NaN NaN NaN NaN NaN

>>> de1.add(ss,axis='index')#ss的索引变成a,b,c

a    b    c

A  200  104  201

B  240  221  247

C  254  198  218

>>> de1.add(ss,axis=0)

a    b    c

A  200  104  201

B  240  221  247

C  254  198  218

>>> de1.add(ss,axis=1)

A   B   C   a   b   c

A NaN NaN NaN NaN NaN NaN

B NaN NaN NaN NaN NaN NaN

C NaN NaN NaN NaN NaN NaN

>>> #如果axis是零,则行是索引,所有列都有效

>>> #以列为单位进行操作,对所有列都有效,同理axis=1相反

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

9:DataFrame丢失数据的处理

处理丢失数据

有两种丢失数据 1 none 2 np.nan(NaN)

np.arange(0,10000)

#相同的计算,int运算的时间少于float,更少与object

Pandas中None与NaN都被视为np.nan

df = DataFrame({'age':[20,21,23,19,22],'salary':[10000,20000,11001,10101,21000]},index=['a','b','c','d','e'],columns=['age','salary','work'])

>>> df

age  salary work

a   20   10000  NaN

b   21   20000  NaN

c   23   11001  NaN

d   19   10101  NaN

e   22   21000  NaN

>>> df.work['a':'b']

a    NaN

b    NaN

Name: work, dtype: object

>>> df.work['a':'b']='python'

>>> df

age  salary    work

a   20   10000  python

b   21   20000  python

c   23   11001     NaN

d   19   10101     NaN

e   22   21000     NaN

>>> >>> df.isnull()

age  salary   work

a  False   False  False

b  False   False  False

c  False   False   True

d  False   False   True

e  False   False   True

>>> df.notnull()

age  salary   work

a  True    True   True

b  True    True   True

c  True    True  False

d  True    True  False

e  True    True  False

>>> #根据获得的数据去除数据的空数据

>>> df.dropna()#去除含有空数据的行

age  salary    work

a   20   10000  python

b   21   20000  python

>>> #默认为行

>>> df.dropna(how='all')#去除全部为nan的行

age  salary    work

a   20   10000  python

b   21   20000  python

c   23   11001     NaN

d   19   10101     NaN

e   22   21000     NaN

>>> #所有都为null的才删除

>>> df.fillna(value='java')

age  salary    work

a   20   10000  python

b   21   20000  python

c   23   11001    java

d   19   10101    java

e   22   21000    java

>>> #使空数据修改为value值

#backfill,bfill,是向后填充ffill,pad是向前填充

>>> df

age  salary    work

a   20   10000  python

b   21   20000  python

c   23   11001     NaN

d   19   10101     NaN

e   22   21000     NaN

>>> df.fillna(method='backfill')#向后填充,实质是后面一行填充前面一行

age  salary    work

a   20   10000  python

b   21   20000  python

c   23   11001     NaN

d   19   10101     NaN

e   22   21000     NaN

>>> df.fillna(method='ffill')#向前填充

age  salary    work

a   20   10000  python

b   21   20000  python

c   23   11001  python

d   19   10101  python

e   22   21000  python

>>> df.fillna(method='ffill',inplace=True)#

>>> df

age  salary    work

a   20   10000  python

b   21   20000  python

c   23   11001  python

d   19   10101  python

e   22   21000  python

>>> obj=pd.Series(['blue','pure','yellow'],index=[0,2,4])

>>> obj

0      blue

2      pure

4    yellow

dtype: object

>>> obj.reindex(range(6),method='bfill')

0      blue

1      pure

2      pure

3    yellow

4    yellow

5       NaN

dtype: object

>>> #这是向后填充

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

3:总结

pandas的Series和DataFrame是构成表结构的两个重要的库,也是学习pandas的基础。

pandas基础(1)_Series和DataFrame的更多相关文章

  1. pandas基础:Series与DataFrame操作

    pandas包 # 引入包 import pandas as pd import numpy as np import matplotlib.pyplot as plt Series Series 是 ...

  2. 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作

    一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...

  3. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  4. Pandas 基础(8) - 用 concat 组合 dataframe

    以各个城市的天气为例, 先准备下面的数据: 印度天气的相关信息: import pandas as pd india_weather = pd.DataFrame({ 'city': ['mumbai ...

  5. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

  6. Pandas基础学习与Spark Python初探

    摘要:pandas是一个强大的Python数据分析工具包,pandas的两个主要数据结构Series(一维)和DataFrame(二维)处理了金融,统计,社会中的绝大多数典型用例科学,以及许多工程领域 ...

  7. numpy&pandas基础

    numpy基础 import numpy as np 定义array In [156]: np.ones(3) Out[156]: array([1., 1., 1.]) In [157]: np.o ...

  8. Pandas 基础(1) - 初识及安装 yupyter

    Hello, 大家好, 昨天说了我会再更新一个关于 Pandas 基础知识的教程, 这里就是啦......Pandas 被广泛应用于数据分析领域, 是一个很好的分析工具, 也是我们后面学习 machi ...

  9. 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础

    在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...

随机推荐

  1. 【剑指Offer学习】【面试题33:把数组排成最小的数】

    题目:输入一个正整数数组,把数组里全部数字拼接起来排成一个数.打印能拼接出的全部数字中最小的一个. 样例说明: 比如输入数组{3. 32, 321},则扫描输出这3 个数字能排成的最小数字321323 ...

  2. SAP FI 科目代码

    资产类 现金 银行存款 其他货币资金 短期投资 短期投资跌价准备 应收票据 应收股利 应收利息 应收账款 其他应收款 坏账准备 预付账款 应收补贴款 物料采购 原材料 包装物 低值易耗品 材料成本差异 ...

  3. linux下 python源码包解压报错

    执行下面的命令 tar -zvxf Python.3.6.5.tgz 报错 gzip: stdin: not in gzip format tar: Child returned status 1 t ...

  4. vue.use解析

    vue.use源码: Vue.use = function (plugin) { /*判断插件是否已引入*/ if (plugin.installed) { return } //倒序为一个数组[] ...

  5. Linux2.4文件系统中vfsmount、安装点的dentry、设备的dentry之间的关系【转】

    本文转载自:https://blog.csdn.net/mishifangxiangdefeng/article/details/7566575 1.vfsmount.安装点的dentry.设备的de ...

  6. bzoj5213: [Zjoi2018]迷宫

    好题!话说省选的都开始构造了吗 由于有K的倍数的限制所以不妨取模,先建K个点表示0~K-1这些数,第i个点向[i*m,i*m+m]建边.不难发现这是合法的但不一定是最优的 考虑合并等价的点,首先从直观 ...

  7. css3立体旋转菜单

    css3立体旋转菜单,css3,3D,立体旋转,立体菜单,菜单导航,css3立体旋转菜单是一款纯css3实现的三维立体旋转导航菜单. 源码下载页:http://www.huiyi8.com/sc/71 ...

  8. c++迷宫小游戏

    c++迷宫小游戏 一.总结 一句话总结: 显示:根据map数组输出图像 走动:修改map数组的值,每走一步重新刷新一下图像就好 1.如果走函数用z(),出现输入s会向下走多步的情况,原因是什么? 向下 ...

  9. STM32中IO口的8中工作模式

    该文摘自:http://blog.csdn.net/kevinhg/article/details/17490273 一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两 ...

  10. Android的appium实例

    1.查看Android的应用包名和activity的方法   (网上有很多种方法,这里应用的是查看日志的方法) CMD中输入>adb logcat -c                   &g ...