一、Series
1.创建
(1)方法一
class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False,fastpath=False)
参数:
data:它可以是一个字典、array-like、标量。表示Series包含的数据,如果是序列/数组,则它必须是一维的- 如果是字典,则字典的键指定了
label。如果你同时使用了index,则以index为准。 - 如果是标量,则结果为:该标量扩充为
index长度相同的列表。
- 如果是字典,则字典的键指定了
index:一个array-like或者一个Index对象。它指定了label。其值必须唯一而且hashable,且长度与data一致。如果data是一个字典,则index将会使用该字典的key(此时index不起作用)。如果未提供,则使用np.arange(n)。name:一个字符串,为Series的名字。dtype:指定数据类型。如果为None,则数据类型被自动推断copy:一个布尔值。如果为True,则拷贝输入数据data
举例:
# (1)由字典创建,字典的key就是index,values就是values
dic = {'a':1 ,'b':2 , 'c':3, '4':4, '5':5}
s = pd.Series(dic)
print(s)
4 4
5 5
a 1
b 2
c 3
dtype: int64
# (2)由数组创建(一维数组)
arr = np.random.randn(5)
s = pd.Series(arr)
print(arr)
print(s)
# 默认index是从0开始,步长为1的数字
s = pd.Series(arr, index = ['a','b','c','d','e'],dtype = np.object)
print(s)
# index参数:设置index,长度保持一致
# dtype参数:设置数值类型
# (3)由标量创建
s = pd.Series(10, index = range(4))
print(s)
# 如果data是标量值,则必须提供索引。该值会重复,来匹配索引的长度
0 10
1 10
2 10
3 10
dtype: int64
(2)方法二
Series.from_array(arr, index=None, name=None, dtype=None, copy=False, fastpath=False)
参数:
- arr:可以是一个字典、array-like、标量。其他参数见1.
2.将Series转换成其他数据类型
(1).to_dict():转换成字典,格式为{label->value}
(2).to_frame([name]):转换成DataFrame。name为Index的名字
(3).tolist():转换成列表
(4).to_string():转换成字符串
.to_string(buf=None, na_rep='NaN', float_format=None, header=True, index=True, length=False, dtype=False, name=False, max_rows=None)
参数:
buf:一个StringIO-like对象,是写入的bufferna_rep:一个字符串,代表数值NaNfloat_format:浮点数的格式化函数。应用于浮点列header:一个布尔值。如果为True,则添加头部信息(index name)index:一个布尔值。如果为True,则添加index labelslength:一个布尔值。如果为True,则添加Series的长度信息dtype:一个布尔值。如果为True,则添加dtype信息name:一个布尔值。如果为True,则添加Series namemax_rows:一个整数值,给出了最大转换的行数。如果为None,则转换全部。
返回转换后的字符串。
二、Index
1.创建
创建Index对象
class pandas.Index(data=None, dtype=None, copy=False, name=None, fastpath=False, tupleize_cols=True)
参数:
data:一个array-like,必须是一维的name:一个字符串,为Index的名字。dtype:指定数据类型。如果为None,则默认为objectcopy:一个布尔值。如果为True,则拷贝输入数据datatupleize_cols:一个布尔值,如果可能则尽量创建MultiIndex对象
Index对象负责管理轴label和其他元数据(比如轴name)。构建Series/DataFrame时,传给index/columns关键字的任何数组或者序列都将被转化成一个Index。Index 对象是immutable,因此用户无法对其进行修改。这样才能够使得Index对象在多个数据结构之间安全共享。
2.多种索引类型
Index:最泛化的Index对象,将轴label表示为一个Python对象组成的Numpy数组Int64Index:针对整数的特殊IndexMultiIndex:层次化索引对象,表示单个轴上的多层索引。可以看做由元组组成的数组DatatimeIndex:存储纳秒级时间戳,用numpy的datatime64类型表示PeriodIndex:针对Period数据(时间间隔)的特殊Index
3.Index功能
Index的功能类似一个固定大小的集合。其类似于集合的方法有(因为Index不可变,因此返回的都是新的Index对象):
.copy([name,deep,dtype]):返回一份Index的拷贝。.append(other):连接另一个Index对象,产生一个新的Index对象。注意重复的label并不会合并.difference(other):计算差集,返回一个Index对象.intersection(other):计算交集,返回一个Index对象.union(other):计算并集,返回一个新的Index对象.isin(values[, level]):计算Index中各label是否在values中.delete(loc):删除下标loc处的元素,得到新的Index.drop(labels[, errors]):删除传入的labels,得到新的Index.insert(loc, item):在指定下标位置插入值,得到新的Index.unique():返回Index中唯一值的数组,得到新的Index
4.将Index转换成其他数据类型
.astype(dtype,[,copy]):转换成另一个数据类型的Index,其label的dtype被转换成指定的值.tolist():转换成列表.to_series(**kwargs):转换成Series,Series的数据和label相同
5.Index提供的选取方法
-
.get_indexer(target[, method, limit, ...]):获取target(一个Index对象)对应的下标列表。-
target:一个Index对象。我们要考察的就是Index中的每个label在self中的下标序列。 -
method:指定label的匹配方法。可以为None,表示严格匹配(如果不存在则下标为 -1)。如果为'pad'/'ffill',则:若未找到匹配的,则使用前向匹配。如果为'backfill'/'bfill',则:若未找到匹配的,则使用后向匹配。如果为'nearest',则:若未找到匹配的,则使用最近邻匹配。匹配时,假设你的
Index的label是有序排列的(要么是升序,要么是降序) -
limit:一个整数,指定前向/后向/最近填充时:如果有连续的k个NaN,则只填充其中limit个。 -
tolerance:一个整数,用于给出在不匹配时,连续采用前向/后向/最近邻匹配的跨度的最大值。
-
-
.get_level_values(level):返回指定level的Index,用于MultiIndex。 -
.get_loc(key[, method, tolerance]):返回指定label处的下标,由key指定。其中method和tolerance参数见上述。如果method=None,且key指定的label找不到,则抛出异常。 -
.get_value(series, key):寻找Series指定label处的值。若key指定的label找不到,则抛出异常。 -
.slice_locs([start, end, step, kind]):计算给定start label和end label之间的下标序列,返回代表该下标序列的切片或者数组。其中不包括end
三、MultiIndex
1.创建
(1)方法一
class pandas.MultiIndex(levels=None, labels=None, sortorder=None, names=None,copy=False, verify_integrity=True, _set_identity=True, name=None, **kwargs)
参数:
-
levels:一个数组的列表,给出了每一级的level。 -
labels:一个数组的列表,给出了每一级level的下标。第i级label是这样产生的:- 首先获取
labels[i],它是一个下标序列,代表第 级。 - 假设第
k位置为整数 3,在第 级第 位的label就是levels[i][3]。
- 首先获取
-
sortorder:一个整数,给出了已经排序好了的level级别。 -
names:一个字符串序列,给出了每个Index的name。其中每个级别对应一个Index -
copy:一个布尔值。如果为True,则拷贝基础数据 -
verify_integrity:一个布尔值。如果为True,则检测各级别的label/level都是连续的且有效的 -
name:指定了本MultiIndex的名字
MultiIndex代表的是多级索引对象。它继承自Index,其中的多级label采用元组对象来表示。在MultiIndex内部,并不直接保存元组对象,而是使用多个Index对象保存索引中每级的label。
(2)其他方法
MultiIndex.from_arrays(arrays[, sortorder, ...]):将二维序列转换为MultiIndex。其中arrays为array-like的序列,每个array-like按顺序的给出了一列label(一个级别)MultiIndex.from_tuples(tuples[, sortorder, ...]):将元组序列转换为MultiIndex。其中tuples为tuple-like的序列,每个array-like按顺序的给出了一行label对(不同级别的一对)MultiIndex.from_product(iterables[, ...]):根据多个可迭代对象生成一个MultiIndex,其中使用笛卡尔积的算法。其中iterables为可迭代对象的序列
你也可以通过传递一个元组列表给Index(),并且将tupleize_cols设置为True来创建MultiIndex
四、DataFrame
1.DataFrame介绍
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每一列都可以是不同的值类型(数值、日期、object类型)。其中object类型可以保存任何python对象,比如字符串。同一列必须是相同的值类型。
DataFrame既有行索引,又有列索引。他可以被看作为Series组成的字典(共用同一个行索引)DataFrame中面向行和面向列的操作基本上是平衡的。其实DataFrame中的数据是以一个或者多个二维块存放的

2.创建
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已有索引,则它们按照指定顺序排列指定的索引。
3.从其他数据结构中创建DataFrame
(1)DataFrame.from_dict()
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,则自动推断。
(2)DataFrame.from_items()
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的解释。
4.将DataFrame转换为其他数据类型
(1).to_dict()
.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'
(2).to_records()
.to_records(index=True, convert_datetime64=True)方法:转换成结构数组。
index:一个布尔值。如果为True,则结果中包含indexconvert_datetime64:一个布尔值,如果为True,则转换DatetimeIndex为datetime.datetime
(3).to_string()
将DataFrame转换成字符串
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 True -
index_names:一个布尔值。如果为True,则添加index names -
justify:指定column label的对齐方式。可以为'left'(左对齐),或者'right'(右对齐)。默认为None
返回转换后的字符串。