DataFrame是一个二维标记数据结构,具有可能不同类型的列。您可以将其视为电子表格或SQL表,或Series对象的字典。它通常是最常用的pandas对象。与Series一样,DataFrame接受许多不同类型的输入:
1.1D ndarray,list,dicts或Series的Dict
2.二维numpy.ndarray
3.结构化或记录 ndarray
4.Series
5.DataFrame
没我们想象的那么复杂,对于DataFrame的操作无非也就是增删改查
。我们也经常将DataFrame称之为数据帧。
DataFrame的使用方法如下:
DataFrame(columnsMap)
pandas.DataFrame( data, index, columns, dtype, copy)data
:上面介绍的各种数据类型index
:行标签,可选缺省值np.arrange(n)columns
:列标签,可选缺省值 np.arange(n)dtype
:列的数据类型copy
:默认值为False,则此命令(或任何它)用于复制数据。
创建一个空的DataFrame:
从list或者1D ndarray构建
通过index和columns属性分别访问行标签和列标签
指定行列索引
访问列:变量名[列名]
访问行:变量名[n:m] 访问从n开始到m-1行的数据
同样也可以通过索引名来访问:
访问行和列(块):
变量名.iloc[n1:n2,m1:m2] 访问n1到(n2-1)行,m1到(m2-1)列
访问指定位置:变量名.at[行名,列名]
如果key不存在的话,会报如上错误。
访问指定位置:变量名.loc[行索引名,列索引名]
使用字典dict
如果使用单纯的字典数据,那么一定要记得
指定index
,否则会报错。
使用来自Series 的 dict
得到的索引将是各个Series的索引的并集。如果有任何嵌套的dict,则首先将这些dicts转换为Series。如果没有传递列,则列将是dict键的有序列表。
如果Series的长度不同,并且具有不同的索引,那么会是什么情况呢?
如果两者部分索引相同呢?
大家可以看到得到的索引将是各个Series的索引的并集,结合上面的例子,想必大家都理解了。
当我们在DataFrame的构造函数中指定列的时候,那么该值会覆盖dict的键值作为列的索引名。否则会默认将dict的键值作为列的索引名。
这里我们重新将列进行命名,在构造DataFrame的时候,在数据d中找不到以’姓名’和’年龄’为键值的数据,所以最后的结果为空。做个比较:
那么如果我们的行索引也是完全不同的呢?
最终的结果好像和我想的不一样。。。再试一下,追加个Series中的索引名。
额,看样子得这么说了:DataFrame构造函数中指定的行列索引优先于dict。
使用dict列表
这个就不多做解释了,上面的都能看懂,这个自然不在话下了。
使用元组和元组字典
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
替代构造函数:DataFrame.from_dict
DataFrame.from_dict采用dicts的dict或类似数组序列的dict并返回DataFrame。DataFrame除了默认情况下的orient参数外,它的操作类似于构造函数’columns’,但可以将其设置’index’为使用dict键作为行标签。
DataFrame.from_records
DataFrame.from_records获取元组列表或带有结构化dtype的ndarray。它类似于普通DataFrame构造函数,但生成的DataFrame索引可能是结构化dtype的特定字段。
这个有点可能有点复杂,关于dtype的的一些东西可以参考下面的链接
https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html
获取,设置和删除列的工作方式与类似的dict操作相同,这里就不在做更多的演示。
插入标量值
插入标量值得时候,它会沿着列进行填充
assign()
DataFrame有一种assign() 方法可以让您轻松创建可能从现有列派生的新列,它始终返回数据的副本,保持原始DataFrame不变。
转置 DataFrane.T
DataFrame列属性访问
如果DataFrame列标签是有效的Python变量名称,则可以像属性一样访问该列:
注意:仅限于列,用在行会出错的。
to_string() 将以表格形式返回DataFrame的字符串表示形式
使用info()获取摘要