Pandas之DataFrame

Pandas之DataFrame

一、DataFrame的创建

例1: 通过list创建

Pandas之DataFrame
import pandas as pd
df = pd.DataFrame([[1,2,3],[4,5,6]])

上面创建了一个2行3列的表格,创建时只指定了表格的内容(通过一个嵌套的list),没有指定列名和索引。
这时列名就自动为 0,1,2 ;索引自动为数值0,1.

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

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

例2:创建例子

Pandas之DataFrame
import numpy as np
dates = pd.date_range('20171001',periods=6)
df = pd.DataFrame(np.random.randn(2,2) , index = dates,columns=list('ab'))
Pandas之DataFrame

二、 DataFrame的一些基本操作

1、获取数据的行数

len(df) 或 len(df.index)

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

Pandas之DataFrame
df.index
df.columns
df.values
 

3、显示数据

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

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

注意: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方法可以添加数据到一个dataframe中,注意append方法不会影响原来的dataframe,会返回一个新的dataframe。

语法:    

DataFrame.append(otherDataignore_index=False, verify_integrity=False)

otherData : 添加的新数据,支持多种格式。

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

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

6、遍历数据

 示例代码如下

for index,row in df.iterrows():
    print index #获取行的索引
    print row.a #根据列名获取字段
    print row[0]#根据列的序号(从0开始)获取字段


7、查找数据

创建如下的dataframe

dates = pd.date_range('20171001',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('20121001',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 是用来插入或修改列的信息。