python数据处理模块pandas_Python 数据处理扩展包: pandas 模块的DataFrame介绍(创建和基本操作)...

DataFrame是Pandas中的一个表结构的数据结构,包括三部分信息,表头(列的名称),表的内容(二维矩阵),索引(每行一个唯一的标记)。

一、DataFrame的创建

有多种方式可以创建DataFrame,下面举例介绍。

例1: 通过list创建

>>> import pandas as pd

>>> df = pd.DataFrame([[1,2,3],[4,5,6]])

>>> df

0 1 2

0 1 2 3

1 4 5 6

[2 rows x 3 columns]

上面代表,创建了一个2行3列的表格,创建时只指定了表格的内容(通过一个嵌套的list),没有指定列名和索引。

这时列名就自动为 0,1,2 ;索引自动为数值0,1.

我们可以指定列表和索引,如:

>>> df = pd.DataFrame([[1,2,3],[4,5,6]],index=['row1','row2'],columns=['c1','c2','c3'])

>>> df

c1 c2 c3

row1 1 2 3

row2 4 5 6

[2 rows x 3 columns]

可以看出,上面代码通过index和 columns参数指定了索引和列名。

例2:创建例子

>>> import numpy as np

>>> dates = pd.date_range('',periods=6)

>>> df = pd.DataFrame(np.random.randn(6,4) , index = dates,columns=list('abcd'))

>>> df

a b c d

2012-10-01 -0.236220 0.586985 0.784953 -0.507129

2012-10-02 -1.020807 -1.316997 -0.747997 1.909333

2012-10-03 0.085208 -0.281736 1.112287 1.572577

2012-10-04 0.008708 -0.925711 -0.615752 -1.183397

2012-10-05 1.158198 -1.393678 0.586624 0.202499

2012-10-06 1.149878 -2.383863 1.646403 1.647935

[6 rows x 4 columns]

上面代码创建的dates是个时间索引,np.random.randn 方法创建一个6行4列的随机数矩阵。

最后的df使用 dates作为索引,使用np.random.randn 方法创建的矩阵作为内容,使用 list('abcd')作为列名。

二、 DataFrame的一些基本操作

1、获取数据的行数

len(df)

len(df.index)

2、显示索引、列和底层的numpy数据

>>> df.index

[2012-10-01, ..., 2012-10-06]

Length: 6, Freq: D, Timezone: None

>>> df.columns

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

>>> df.values

array([[-0.2362202 , 0.58698529, 0.78495289, -0.50712897],

[-1.02080723, -1.31699704, -0.74799734, 1.90933343],

[ 0.08520807, -0.28173589, 1.11228743, 1.57257716],

[ 0.00870768, -0.92571109, -0.6157519 , -1.18339719],

[ 1.15819829, -1.39367835, 0.586624 , 0.20249899],

[ 1.14987847, -2.38386297, 1.64640287, 1.64793523]])

说明,这个例子中的df使用的是上面创建的 DataFrame对象

3、显示数据

df.head([n])  # 获取df中的前n行数据,n不指定,则默认为5

df.tail([n])  # 获取df中的后n行数据,n不指定,则默认为5

>>> dates = pd.date_range('',periods=100)

>>>df = pd.DataFrame(np.random.randn(100,4) , index = dates,columns=list('abcd' ))

>>> df.head()

a b c d

2012-10-01 -1.010746 0.176277 -0.838870 0.742626

2012-10-02 0.111174 0.182840 0.193215 1.517350

2012-10-03 -0.757385 1.137521 -0.247181 0.659187

2012-10-04 -1.157838 1.464957 -2.106226 1.160796

2012-10-05 0.141747 0.032917 0.647210 -0.861413

[5 rows x 4 columns]

>>> df.tail()

a b c d

2013-01-04 -0.225416 -1.436526 -0.349813 -0.130948

2013-01-05 -1.544653 -0.214760 1.455662 0.050591

2013-01-06 0.582737 -0.646163 -1.763772 -1.463706

2013-01-07 -0.694467 0.710954 -2.227337 -0.257376

2013-01-08 0.282839 -1.100346 1.526374 1.658781

注意,head 和 tail 返回的是一个新的dataframe,与原来的无关

4、按照索引排序

newdf = df.sort_index(ascending=False,inplace=True)

ascending=False 参数指定按照索引值的以降序方式排序,默认是以升序排序。

inplace=True 指定为True时,表示会直接对df中的数据进行排序,函数返回值为None,newdf的值为None;

如果不设置为True(默认为false),则不会对df中数据进行修改,会返回一个新的df,这时newdf就有内容,是一个新的排序后的df。

5、添加数据(append方法)

append方法可以添加数据到一个dataframe中,注意append方法不会影响原来的dataframe,会返回一个新的dataframe。

语法:

DataFrame.append(otherData, ignore_index=False, verify_integrity=False)

其中otherData参数是要添加的新数据,支持多种格式。

ignore_index 参数默认值为False,如果为True,会对新生成的dataframe使用新的索引(自动产生),忽略原来数据的索引。

verify_integrity参数默认值为False,如果为True,当ignore_index为False时,会检查添加的数据索引是否冲突,如果冲突,则会添加失败。

举例说明1:

dates = pd.date_range('',periods=10)

df = pd.DataFrame(np.random.randn(10,4) , index = dates,columns=list('abcd'))

dates1 = pd.date_range('',periods=2)

df1 = pd.DataFrame(np.random.randn(2,4) , index = dates1,columns=list('abcd'))

df.append(df1) # df1中的2行数据会加到df中,且新产生的df的各行的索引就是原来数据的索引

df.append(df1,ignore_index=True) # df1中的2行数据会加到df中,且新产生的df的索引会重新自动建立

df.append(df1,verify_integrity=True) #会报错,因为df1的索引和df2的索引冲突了

说明,df1的列名必须和df一致,否则不是简单的添加行。而是会添加列,再添加行。

举例2:

>>> df.append({'a':10,'b':11,'c':12,'d':13},ignore_index=True)

a b c d

0 -0.471061 -0.937725 -1.444073 0.640439

1 -0.732039 -1.617755 0.281875 1.179076

2 1.115559 0.136407 -2.225551 0.119433

3 0.695137 0.380088 -0.318689 -0.048248

4 1.483151 -0.124202 -0.722126 0.035601

5 0.326048 -0.139576 -0.172726 0.931670

6 0.858305 0.857661 -0.279078 0.583740

7 -0.041902 0.408085 -1.019313 0.005968

8 0.626730 0.143332 -0.404894 0.377950

9 -1.850168 0.430794 -0.534981 -0.738701

10 10.000000 11.000000 12.000000 13.000000

上面代码是新产生的df会添加一行。这种操作,ignore_index参数值必须设置为True,否则会报错。

举例3:

>>> df.append({'e':10},ignore_index=True)

a b c d e

0 -0.471061 -0.937725 -1.444073 0.640439 NaN

1 -0.732039 -1.617755 0.281875 1.179076 NaN

2 1.115559 0.136407 -2.225551 0.119433 NaN

3 0.695137 0.380088 -0.318689 -0.048248 NaN

4 1.483151 -0.124202 -0.722126 0.035601 NaN

5 0.326048 -0.139576 -0.172726 0.931670 NaN

6 0.858305 0.857661 -0.279078 0.583740 NaN

7 -0.041902 0.408085 -1.019313 0.005968 NaN

8 0.626730 0.143332 -0.404894 0.377950 NaN

9 -1.850168 0.430794 -0.534981 -0.738701 NaN

10 NaN NaN NaN NaN 10

可以看出,如果插入的数据,指定的列名不存在,新产生的df不仅会增加行,还会增加列。

6、遍历数据

示例代码如下

for index,row in df.iterrows():

print index #获取行的索引

print row.a #根据列名获取字段

print row[0]#根据列的序号(从0开始)获取字段

7、查找数据

创建如下的dataframe

dates = pd.date_range('20121001',periods=10)

df = pd.DataFrame(np.random.randn(10,4) , index = dates,columns=list('abcd'))

可以有各种方式获取df中的全部或部分数据

df['a']  #按照列名获取指定的列,返回的是一个Series,其中key是索引,value是该列对应的字段值

df[:2] #获取前2行数据,效果等同 df[0:2],返回的是一个新的dataframe

df[2:5] #获取第3行~5行 这3条记录,返回的是一个新的dataframe

df.loc['20121009'] #获取指定索引的行,等同于  df.loc['2012-10-09'],返回的是一个Series,其中key是列名,value是该列对应的字段值

df.iloc[3]  #获取指定序号的行,这里是第4行

8、删除数据

del df['a']  #删除dataframe中指定的列,这个是直接影响当前的dataframe,注意 del不是函数,是python中的内置语句,没有返回值

df.drop(['a'],axis=1)  #删除指定的列,与上面的区别是不会影响原来的dataframe,dop方法会返回一个删除了指定列的新的dataframe

说明,dop方法既可以删除列,也可以删除行,但上面创建的df无法被删除行(?),下面这个例子可以删除行

data = pd.DataFrame(np.arange(16).reshape((4, 4)),index=['Ohio', 'Colorado', 'Utah', 'New York'],columns=['one', 'two', 'three', 'four'])

data.drop(['Colorado', 'Ohio'])

上面代码中的dop方法删除了指定索引的两行,注意同删除列一样,drop方法不会影响原来的dataframe,会返回一个删除后的新的dataframe

9、增加列

例子代码如下

dates = pd.date_range('',periods=10)

df = pd.DataFrame(np.random.randn(10,3) , index = dates,columns=list('abc'))

df['d'] = pd.Series(np.random.randn(10),index=df.index)

上面代码先是创建了一个dataframe,然后通过df['d'] 插入了一个新的列。如果指定的列名存在,会修改列的内容。

10、修改指定行或单元格数据

df.values[i][j]= xxx  #其中i是行号,j是列号,都是从0开始

df.values[1]=12  # 会把一行中的所有列中的数据设置为同一个值,这里的参数1是序号,这里为第2行数据

df['a'] = 12  #这样会把指定列的所有数据都设置为同一个值,如这里的12。注意,如果指定的列名不存在,会新增列

11、插入行

前面介绍的append方法是产生一个新的 dataframe,不会改变原来的dataframe。

那有没有办法直接在当前的frame中插入一行数据呢?  上面介绍的 df[列名] = xxx 是用来插入或修改列的信息。

Python 数据处理扩展包: numpy 和 pandas 模块介绍

一.numpy模块 NumPy(Numeric Python)模块是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list str ...

Python 数据处理扩展包: pandas 模块的DataFrame介绍(读写数据库的操作)

1.读取表中的内容,如下例子: import MySQLdb try: conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='root ...

吴裕雄--天生自然python学习笔记:pandas模块删除 DataFrame 数据

Pandas 通过 drop 函数删除 DataFrarne 数据,语法为: 例如,删除陈聪明(行标题)的成绩: import pandas as pd datas = [[65,92,78,83,7 ...

吴裕雄--天生自然python学习笔记:pandas模块用 dataframe.loc 通过行、列标题读取数据

用 df.va lue s 读取数据的前提是必须知道学生及科目的位置,非常麻烦 . 而 df.loc 可直接通过行.列标题读取数据,使用起来更为方便 . 使用 df.loc 的语法为: 行标题或列标题 ...

Python进阶(十一)----包,logging模块

Python进阶(十一)----包,logging模块 一丶包的使用 什么是包: ​ 包是通过使用 .模块名的方式组织python模块名称空间的方式. 通俗来说,含有一个__init__.py文件的文 ...

关于python中的包,模块导入的问题详解(一)

最近由于初学python,对包,模块的导入问题进行了资料的搜集,查阅,在这里做一个总结: 一: import 模块 在import的过程中发生了什么?我们用一个实验来说明: 以上截图表明:在impor ...

Python之扩展包安装

读者朋友,在比较新的版本(Python 2 >=2.7.9 or Python 3 >=3.4)中,pip或者easy_install 扩展包命令已经默认安装(可查看   你的安装目录\p ...

Python学习 之 包和模块

1.rpm -ql python #查看python在计算机中安装了哪些文件 2.模块是一个可以导入的Python脚本文件 包是一堆按目录组织的模块和子包,目录下的__init__.py文件存放了包的 ...

Python和C++的混合编程(使用Boost编写Python的扩展包)

想要享受更轻松愉悦的编程,脚本语言是首选.想要更敏捷高效,c++则高山仰止.所以我一直试图在各种通用或者专用的脚本语言中将c++的优势融入其中.原来贡献过一篇也是 ...

随机推荐

初始Bootstrap

使用示例 ①下载Bootstrap框架 网址:http://v3.bootcss.com/getting-started/#download ②解压得到三个文件     ③将文件添加进项目后,在页面中 ...

使用MacBook Air的4项基本技巧

MacBook Air可以说是笔记本电脑中的翘楚:性能优异.拥有超长的电池使用时间的同时保持了轻盈的体态.纤薄的外形,这几乎满足了人们对笔记本的所有要求.如果你也是一个MacBook Air用户,不妨 ...

关于alpha透明度

使用场景 一个半透明的框上面   放了一些label     改变半透明view的alpha    结果 label的  alpha 也跟着改变了. 其实不用那么麻烦   给你们UI  要一个色值也可 ...

数据库字段类型中char和Varchar区别

char和varchar区别 char类型:对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,char存储定长数据很方便,char字段上的索引效率级高,比如定义char(10),那么不论你 ...

android手机操作SD的使用方法

写入SD卡 package com.example.openfileproject; import java.io.File; import java.io.FileInputStream; impo ...

Html在线编辑器--基于Jquery的xhEditor轻量级编辑器

xhEditor V1.2.2 下载地址 开源中国社区: http://www.oschina.net/p/xheditor xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化XHT ...

Luogu P1596 [USACO10OCT]湖计数Lake Counting

题目描述 Due to recent rains, water has pooled in various places in Farmer John's field, which is repres ...

设置IIS7/IIS7.5的FTP支持断点续传

Windows Server 2003的IIS自带FTP默认支持断点续传,但是Windows Server 2008/R2默认已经不支持,因此需要注意设置,才能让其支持断点续传,更好的利用宝贵的服务器 ...

JavaScript getter和setter

对象的属性是由属性名name,值key,和其他特性(可读写性 writable,可枚举性enumerable,可配置性configurable)组成的.从ES5开发,提供了getter和setter ...

ios开关按钮

.al-toggle-button{ appearance: none; -webkit-appearance: none; position: relative; width: 52px; heig ...

你可能感兴趣的:(python数据处理模块pandas_Python 数据处理扩展包: pandas 模块的DataFrame介绍(创建和基本操作)...)