Python——pandas模块—DataFrame数据结构
- pandas
- DataFrame
- 创建DataFrame对象
- columns= 指定列名,index= 指定行索引
- 查看属性值
- 索引列:查看指定列(返回一个Series)
- 索引行:查看指定行
- 重新行索引DataFrame.reindex()
- DataFrame.index=[ ]修改行索引
- DataFrame.columns=[ ]修改列索引
- 行列的增删改
Python——pandas模块—DataFrame数据结构
pandas
- Numpy更适合处理统一的数值数组数据
- pandas是专门为处理表格和混杂数据设计的
- panda有两种数据结构:
- Series
- 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(行名)