4. DataFrame
DataFrame
是一个表格型的数据结构,它含有一组有序的列,每一列都可以是不同的值类型(数值、日期、object
类型)。其中object
类型可以保存任何python
对象,比如字符串。同一列必须是相同的值类型。DataFrame
既有行索引,又有列索引。他可以被看作为Series
组成的字典(共用同一个行索引)DataFrame
中面向行和面向列的操作基本上是平衡的。其实DataFrame
中的数据是以一个或者多个二维块存放的
class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
:data
:可以是一个二维数组、字典、或者DataFrame
。index
:一个Index
或者array-like
对象(必须为一维的),它指定了行标签。如果未提供,则使用np.arange(n)
。columns
:一个Index
或者array-like
对象(必须为一维的),它指定了列标签。如果未提供,则使用np.arange(n)
。dtype
:指定数据类型。如果为None
,则数据类型被自动推断copy
:一个布尔值。如果为True
,则拷贝输入数据data
常见的构造
DataFrame
有以下情况:- 二维
ndarray
:data
就是数据,此时可以传入index/columns
参数 - 一个字典,其中字典的值为一维数组、一维列表、一维元组:此时每个键就是列索引,对应的值就是列数据。要求所有序列的长度相同
numpy
的结构化数组:类似于由数组组成的字典Series
组成的字典:此时每个键就是列索引,对应的Series
就是列数据。如果没有显式的指定行索引,那么各个Series
的索引将会被合并成DataFrame
的行索引。- 字典的字典:各个内层字典会成为一列,键会被合并成结果的行索引。跟
Series 组成的字典
情况一致 - 字典或者
Series
的列表:每一项将会成为DataFrame
的一行。字典的键、Series
索引的并集将会成为DataFrame
的列索引 - 列表、元组组成的列表:类似于二维
ndarray
- 另一个
DataFrame
:该DataFrame
的索引将会被沿用,除非显式指定其他索引 numpy
的MaskedArray
:类似于二维ndarray
,只是掩码值在结果DataFrame
中会变成NA/缺失值
columns
/index
有两种作用:如果构造的DataFrame
没有索引,则它们分别给索引赋值;如果构造的DataFrame
已有索引,则它们按照指定顺序排列指定的索引。可以通过下面的类方法从其他数据结构中创建
DataFrame
:DataFrame.from_dict(data, orient='columns', dtype=None)
:从字典中创建DataFrame
。data
:是个字典,其格式为:{key:array-like}
或者{key:dict}
。orient
:指定了key
为行还是列。参数的值为'columns'
(key
为列的label
,默认行为);或者'index'
(key
为行的label
)dtype
:数据类型。如果为None
,则自动推断。
DataFrame.from_items(items, columns=None, orient='columns')
:从元组序列中创建DataFrame
。items
:为元组序列,元组格式为:(key,value)
,其中value
为表示一维数据的序列或者Series
对象。columns
:一个序列,给出列的labels
。- 当
orient='index'
时必须传入(此时key
指定的是行的label
),且长度不能大于DataFrame
的列数。 - 当
orient='columns
时,key
就是列的label
,此时columns
关键字参数指定的列label
必须等于某个key
;否则抛出异常。
- 当
orient
:参见.from_dict
的解释。
你可以将
DataFrame
转换为其他数据类型。.to_dict(*args, **kwargs)
方法:转换成字典。参数orient
决定了转换方式。orient ='dict'
:字典的形式为:{col_label:{index_label:value}}
(默认行为)orient ='list'
:字典的形式为:{col_label:[values]}
orient ='series'
:字典的形式为:{col_label:Series(values)}
orient ='split'
:字典的形式为:{'index':[index_labels],'columns':[col_labels],'data':[values]}
orient ='records'
:字典的形式为:[{col_label:value},...,{col_label:value}]
orient ='index'
:字典的形式为:{index_label:{col_label:value}}
- 你可以使用简化字符串,如
's'
代表'series'
,'sp'
代表'split'
.to_records(index=True, convert_datetime64=True)
方法:转换成结构数组。index
:一个布尔值。如果为True
,则结果中包含index
convert_datetime64
:一个布尔值,如果为True
,则转换DatetimeIndex
为datetime.datetime
可以将
DateFrame
转换成字符串:to_string(buf=None, columns=None, col_space=None, header=True, index=True,
na_rep='NaN', formatters=None, float_format=None, sparsify=None,
index_names=True, justify=None, line_width=None, max_rows=None,
max_cols=None, show_dimensions=False)
buf
:一个StringIO-like
对象,是写入的buffer
columns
:一个序列,指定了列标签的一个子集,该子集的数据被输出col_space
:一个整数,指定了每一列的最小宽度header
:一个布尔值。如果为True
,则添加头部信息(column labels
)index
:一个布尔值。如果为True
,则添加index labels
na_rep
:一个字符串,代表数值NaN
float_format
:浮点数的格式化函数(单参数)。应用于浮点列formatters
:一个单参数函数的列表(列表长度等于列数)或者一个单参数函数的字典。- 如果是列表,则根据列号,对应使用格式化函数
- 如果是字典,则根据列
label
,对应使用格式化函数
sparsify
:一个布尔值。Set to False for a DataFrame with a hierarchical index to print every multiindex key at each row, default Trueindex_names
:一个布尔值。如果为True
,则添加index names
justify
:指定column label
的对齐方式。可以为'left'
(左对齐),或者'right'
(右对齐)。默认为None
返回转换后的字符串。