Bootstrap

Python——pandas模块—DataFrame数据结构

Python——pandas模块—DataFrame数据结构

pandas

  • Numpy更适合处理统一的数值数组数据
  • pandas是专门为处理表格和混杂数据设计的
  • panda有两种数据结构:
    1. Series
    2. DataFrame

DataFrame

  • DataFrame是一个表格型(类似Excel)的数据结构含有一组有序的列,每列可以是不同值类型(数值,字符串,bool等)
  • 与Series(只有行索引index)相比,DataFrame 既有行索引,也由列索引
  • 可以看成由多个共用一个列索引的Series组成的字典
    在这里插入图片描述

创建DataFrame对象

创建函数

obj = pandas.Dataframe()#创建函数

通过字典创建

  • 定义一个字典
  • 字典的 key 就是DataFrame的 列名
  • 字典的 value 就是一个Serise.values
  • Dataframe的index不设定时默认传 0~N
    看一个例子:
'''创建DataFrema'''
import pandas as pd
#定义一个字典
dic = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002,2003],'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
#通过DataFrame()创建对象
frame = pd.DataFrame(dic)
print('通过字典创建一个没有传入指定index的DataFrame对象:')
print(frame)

在这里插入图片描述

通过一个二维数组创建

只不过通过二维数组创建的元素都是相同类型的了
如果不重新传入索引columns,index,则都从0~n赋值

import pandas as pd
import numpy as np
arr = np.arange(24).reshape(6,4)
frame = pd.DataFrame(arr,columns=['a','b','c','d'],index=['one','two','three','four','five','six'])
print(frame)

在这里插入图片描述

columns= 指定列名,index= 指定行索引

修改frame的列名
实际上是根据columns传入的值去字典里索引

当指定的列名包含在字典key中

'''指定列名'''
frame2 = pd.DataFrame(dic,columns=['pop','year','state'])
print('修改完列名的DataFrame')
print(frame2)

在这里插入图片描述

当指定的列名包含不在字典key中

当指定的列名包含不在字典key中,索引不到,
创建新的列,值设为NaN(产生缺失值)

'''指定列名不全在key中'''
frame3 = pd.DataFrame(dic,columns=['pop','year','state','debt'],index=['one','two','three','four','five','six'])
print('指定完列名、行索引的DataFrame')
print(frame3)

在这里插入图片描述

查看属性值

查看columns(列索引)

print(frame3.columns)

查看index(行索引)

print(frame3.index)

查看values(元素数组)

print(frame3.values)

在这里插入图片描述

索引列:查看指定列(返回一个Series)

返回一个Series

DataFrema.column

print('yera列的Series')
print(frame.year)

查看指定列类型:

print('year列的数据类型')
print(type(frame.year))

在这里插入图片描述

DataFrema[column]

#DataFrema[column]
print('stste列的Series')
print(frame['state'])

在这里插入图片描述

索引行:查看指定行

在Sreies中索引行我们用Series.[index],但在DataFrema是这个方式已经被索引列占用,所以索引列,我们用另外的方式

DataFrame.loc[index]

行元素的数据类型也是一个Series

import pandas as pd
dic = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002,2003],'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
frame = pd.DataFrame(dic,index=['one','two','three','four','five','six'])
print('three行的Series')
print(frame.loc['three'])
print('three行的数据类型:',type(frame.loc['three']))

在这里插入图片描述

DataFrame.iloc[行号]

行号从0开始

print('第0行的数据Series:')
print(frame.iloc[0])

重新行索引DataFrame.reindex()

更改行的位置

'''修改行索引。列索引'''
import pandas as pd
import numpy as np
arr = np.arange(24).reshape(6,4)
frame = pd.DataFrame(arr)
print('修改前')
print(frame)
#修改行索引
frame2 = frame.reindex([4,5,2,1,3,0])
print('修改后')
print(frame2)

在这里插入图片描述

DataFrame.index=[ ]修改行索引

DataFrame.columns=[ ]修改列索引

修改索引

#修改索引名
import pandas as pd
import numpy as np
arr = np.arange(24).reshape(6,4)
frame = pd.DataFrame(arr)
#修改索引名
frame.columns=['a','b','c','d']
frame.index=['one','two','three','four','five','six']
#修改索引名后
print(frame

在这里插入图片描述

行列的增删改

指定:
axis = 1 表示列
默认 表示行

data = DataFrame.drop(列名,axis = 1)
data = DataFrame.drop(行名)
;