DataFrame类型
DataFrame是一个多维数据类型。因为通常使用二维数据,因此,我们可以将DataFrame理解成类似excel的表格型数据,由多列组成,每个列的类型可以不同。
因为DataFrame是多维数据类型,因此,DataFrame既有行索引,也有列索引。
一. 创建方式
我们可以使用如下的方式创建(初始化)DataFrame类型的对象(常用):
- 二维数组结构(列表,ndarray数组,DataFrame等)类型。
- 字典类型,key为列名,value为一维数组结构(列表,ndarray数组,Series等)。
说明:
- 如果没有显式指定行与列索引,则会自动生成以0开始的整数值索引。我们可以在创建DataFrame对象时,通过index与columns参数指定。
- 可以通过head,tail访问前 / 后N行记录(数据)。
import numpy as np
import pandas as pd
# 创建DataFrame类型的对象。DataFrame类型可以想象为是二维的表格类型(类比于Excel,数据库中的table)。
# 通过二维数据结构(二维类数组对象),例如,二维列表,二维ndarray。
df = pd.DataFrame([[1, 2, 3], [2, 3, 4]])
df2 = pd.DataFrame([[10, 20, 30], [20, 30, 40]])
# type(df)
# print(df)
# print(df)
# print(df2)
# display函数类似于print函数,但是对于部分对象,输出会有美化的效果。
# display函数时IPython扩展的函数,在Python解释中不能使用。
# 为什么要使用display?
# 如果多个对象(表达式)直接求值,只会显示最后一个对象(表达式)的求值结果。我们可以使用print来查看
# 多个对象(表达式)的计算结果,但是,print输出的效果可能不够友好。如果既希望同时显示多个求值结果,又
# 希望以友好的方式显示,可以使用display函数代替print函数。(display函数展示的效果与直接求值的效果是相同的。)
# df
# display(df)
# display(df2)
# 通过字典来创建DataFrame类型的对象。字典的每组键值对表示DataFrame的一列。
# 每组键值对的key用来表示列索引(列标签),value用来表示该列的值(value为一维类数组对象)。
# df = pd.DataFrame({0:[1, 2], 1:[2, 3], 2:[3, 4]})
# 如果没有显式去指定DataFrame的行(列)索引,则默认创建从0开始,增量为1的索引(与Series的默认索引生成方式相同)。
# 我们也可以在创建DataFrame的时候,通过index参数来显式指定行索引,通过columns参数来显式指定列索引。
# df = pd.DataFrame(np.random.random(size=(3, 3)), index=["a", "b", "c"], columns=["k", "l", "m"])
# df
# head tail方法
# 最多显示参数指定的前(后)N条记录。N默认为5。
df = pd.DataFrame(np.random.random(size=(30, 3)))
# df.head()
# df.tail(3)
# 随机抽样。从数据集中随机选择出参数指定的记录数。如果没有显式指定抽取的记录数,则默认为1。
# df.sample(5)
# df.sample()
# sample默认为不放回抽样,这意味着,抽样的数量不能大于数据集的数量。如果需要放回抽样,
# 可以将参数replace的值设置为True。(默认为False)
# df.sample(31, replace=True)
# 如果需要产生相同的随机序列,我们可以显式设置参数random_state(相当于随机种子)。
# df.sample(5, random_state=30)
类似excel,行和列有索引
多行多列
Read_csv多
咱们以后肯定是读取,而不是自己创建
列表,ndarray数组,DataFrame
先传二维列表
上面都是什么? 索引
Series是一维的
DataFrame是二维的,含有两个索引,行标签索引,列标签索引
没有指定,就从0开始,依次递增
Print和直接a一样吗?
Print和直接a不一样,一个结果粗糙一个美观些
所以以后,都用求值的方式(out)展示,不用print的方式
Why只显示df2?
如果依次发送两条,按顺序执行
Df有结果
被df2的结果覆盖,只显示最后的记过
本质原因是ipython里面只能一条一条写
Jn可以写很多
想解决,都使用print
Display方法
Display方法解决两者困境
类似print函数,但是对于部分对象,输出会有美化的效果
只能在ipython中用,不能再python解释器中使用
Display如下
Display函数展示的效果与直接求值的效果是一样的
Df
上面说明了Datafram可以传二维数组,
2. 可以传ndarray数组
通过字典来创建DataFrame类型的对象
那么我们再来看通过字典来创建DataFrame类型的对象
字典的每组键值对,用来表示DataFrame的一列
这个图的线上面 列标签 下 列值
加了行标签,列标签
Series一维的,一个索引
DataFrame二维的,两个索引:行索引,列索引
如果没有显示去指定DataFrame的行 列索引,则默认创建从0开始,增量为1的索引(与series的默认索引生成方式相同)
我们也可以再创建DataFrame的时候
指定行索引,列索引
最多显示参数指定的前 后 N条记录,M默认为5
报错问题:行数少了