目录
1、DataFrame类型
DataFrame是一个二维数据类型。由多行多列组成,每个列的类型可以不同。DataFrame既有行索引,也有列索引。
行索引和列索引其实都是index,但为了方便区分,创建时用index表示行索引,columns表示列索引,但本质上都是index。
操作DataFrame时需要导入的模块:
import numpy as np
import pandas as pd# 忽略警告
import warnings
warnings.filterwarnings('ignore')
2、DataFrame创建方式
我们可以使用如下的方式创建(初始化)DataFrame类型的对象(常用):
- 二维数组结构(列表,ndarray数组,DataFrame等)类型。
- 字典类型,key为列名,value为一维数组结构(列表,ndarray数组,Series等)。
说明:
- 如果没有显式指定行与列索引,则会自动生成以0开始的整数值索引。我们可以在创建DataFrame对象时,通过index与columns参数指定。
- 可以通过head(n),tail(n)访问前 / 后n行记录(数据)。
- 通过sample(n) 随机抽取n行
- df.index.name = "index_name" ,指定行索引名称
df.columns.name = "columns_name" ,指定列索引名称
案例:
# 使用二维数据结构创建DataFrame。没有指定行列索引,自动生成行列索引。都是从0开始的自然数
array1 = np.random.rand(3, 5)
df = pd.DataFrame(array1)
display(df)
0 1 2 3 4 0 0.878552 0.164219 0.934828 0.762890 0.283276 1 0.783461 0.969697 0.999134 0.557880 0.322521 2 0.775136 0.423268 0.051412 0.063281 0.863997
# 使用字典来创建DataFrame。一个键值对为一列。key指定列索引,value指定该列的值。
df = pd.DataFrame({"贵阳":[101,102,103],"杭州":[201,202,203],"广州":[301,302,303]})
display(df)
df = pd.DataFrame(np.arange(15).reshape((3,5)),index=list("abc"),columns=list("ABCDE")) #指定行列索引
# 显示前N条记录
display(df.head(2))
# 显示后N条记录
display(df.tail(2))
# 随机抽取N条记录
display(df.sample(2))
df = pd.DataFrame(np.random.rand(3, 5), index=["地区1", "地区2", "地区3"], columns=["北","上", "广","深", "杭"])
df.index.name = "index_name" #指定行索引名称
df.columns.name = "columns_name" #指定列索引名称
display(df)
df = pd.DataFrame(np.random.rand(3, 5), index=["地区1", "地区2", "地区3"], columns=["北","上", "广","深", "杭"])
# 注意Index首字母大写
idx = pd.Index(["GDP增长", "人口增长", "人才增长"], name = "index_name") #修改行索引index
df.index = idx
display(df)
3、DataFrame相关属性
- index 索引
- columns 列
- values 值
- shape 形状
- ndim 维度
- dtypes 数据类型
说明:
- 可以通过index访问行索引,columns访问列索引,values访问数据,其中index与columns也可以进行设置(修改)。
- 可以为DataFrame的index与columns属性指定name属性值。
- DataFrame的数据不能超过二维。
案例:
df = pd.DataFrame(np.random.rand(3, 5), index=["GDP增长", "人口增长", "人才增长"], columns=["北","上", "广","深", "杭"])
display(df)
display(df.values, type(df.values)) # 返回DataFrame关联的ndarray数组
display(df.index) # 返回行索引
display(df.columns) # 返回列索引
display(df.shape) # 返回形状
display(df.ndim) # 返回维度
display(df.dtypes) # 返回各列的类型信息。
df.index = ["r1", "r2", "r3"] #修改行索引
df.index.name = "index_name" #给行索引起名
df.columns.name = "columns_name" #给列索引起名
display(df)
4、DataFrame相关操作
4.1.列操作
df = pd.DataFrame(np.random.rand(5, 5), columns=list("abcde"), index=list("hijkl"))
display(df)
-
获取列:
- df[列索引]
- df.列索引
- df.iloc[:,:]
- 案例:
# 获取DataFrame的列。通过df[索引]的方式,永远是获取列,不会获取行。【索引永远被解析为是列索引。】
display(df["a"], type(df["a"]))
# 获取列的第二种方式:(建议大家使用前者,因为不受特殊名称的限制。)
display(df.a)
# 获取多个列(返回一个DataFrame,即使只选择一个列)
display(df[["a", "d"]])
#不管列名和行的切片索引
display(df.iloc[:,2:5]) #获取2-5列(注意:从0列开始算)
display(df.iloc[:,:5]) #获取前5列
display(df.iloc[:,[False,True,True,False,True,True]]) #