本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
格式说明:
方法
返回值类型
说明参数
说明
初始化DataFrame
DataFrame()
df
data=None 2D数据或字典index=None
索引columns=None
列标签dtype=None
数据类型copy=False
是否复制数据
属性及底层数据结构
.as_matrix()
ndarray
columns=None 返回指定列(默认全部).get_dtype_counts()
.get_ftype_counts()
.select_dtypes()
df
选择或排除指定数据类型的列include=None
标量或list_like, 要选择的列exclude=None
标量或list_like, 要排除的列
.memory_usage()
Series
df的内存使用情况index=True
索引是否参与计算deep=False
是否计算df引用的对象的内存使用情况
.index
.columns
.values
ndarray
df的值.dtypes
Series
df每一列的数据类型.ftypes
Series
返回df每一列是稀疏还是稠密, 以及数据类型.axes
list
返回 [行标签, 列标签].ndim
int
轴数.size
int
df的元素数量.shape
tuple
df的形状
转换
.astype()
df
转换数据类型dtype
np.dtype 或 {列名: np.dtype}copy=True
是否复制基层数据errors='raise'
'raise': 转换失败则报错; 'ignore': 转换失败则保留原数据类型**kwargs
更多关键字参数
.infer_objects()
df
试图推断更好的dtypes.copy()
df
拷贝数据deep=True
False: 同赋值号, True: 拷贝数据, 但不会深层拷贝
.isnull()
df
判断对应位置元素是否是空值, 0.22版本新增.isna().notnull()
df
判断对应位置元素是否不是空值, 0.22版本新增.notna()
索引, 迭代
.head()
df
n=5 返回前n行.at[i, c]
.iat[m, n]
.loc[i, c]
[i, c]
基于单个标签访问[[i1,i2], [c1,c2]]
基于多个标签访问[i1:i2, c1:c2]
包括边界[bool_df]
仅保留True位置的值
.iloc[m, n]
.insert()
df
新增列loc
要插入的位置[0, len(columns)]column
要设置的列标签value
要插入的值allow_duplicates=F
列标签是否允许重名
.__iter__()
iter
返回一个列标签迭代器.iteritems()
iter
返回列迭代器 (列名, Series).iterrows()
iter
返回行迭代器 (索引, Series).itertuples()
iter
返回行迭代器 Pandas(Index=i1, c1=v1, c2=v2, ...)index=True
是否返回索引name='Pandas'
.lookup()
ndarray
返回 [df.loc[i1,c1], df.loc[i2,c2], ...]row_labels
[i1, i2, ...]col_labels
[c1, c2, ...]
.pop()
Series
item 删除并返回指定列.tail()
df
n=5 返回后n行.xs()
key
行标签或列标签, 可以是Multilndex (c_name or int)axis=0
轴level=None
标量或list_like. 指定key是多级索引中的哪几级drop_level=True
是否删除level指定的那几级索引
.isin()
df
判断元素是否在values中values
list
: 判断所有元素是否在此列表中dict
: {c: []} 判断对应列的值是否在字典对应列表中df
: 对应列名, 包含且index相同才返回True
.where()
df
把df中不满足条件的那些值替换为othercond
跟df同形状的bool元素组成的2D数据oter=nan
标量或df. False对应的值替换为otherinplace=False
是否本地修改axis=None
df和other对齐的轴, 另外一个轴按顺序对齐level=None
如有需要, 对齐级别errors='raise'
此参数目前无效try_cast=False
尝试将结果转换为输入类型raise_on_error=N
0.21弃用
.mask()
df
与where相反, 将满足条件的替换为other.query()
df
返回满足条件的行expr
比如 'c1 > c2' 返回满足c1>c2的那些行 (也可用@符号调用变量)inplace=False
是否本地修改**kwargs
pandas.eval()
运算符
.add()
df
加法运算, 类似df+otherother
常量, Series或dfaxis='columns'
{0, 1, 'index', 'columns'}, other为Series时生效level=None
int或name. 在一个级别上广播fill_value=None
用来填充缺失值的值, 若两个df位置都丢失, 结果将会丢失
.sub; .mul; div; .truediv; .floordiv; .mod; .pow
同 - * / / // % **.radd; .rsub; ...
右侧运算, 即 other - df 等.lt ; .gt ; .le ; .ge ; .ne ; .eq
同 < > <= >= != ==.combine()
df
使用自定义函数运算other
dffunc
传入两个Series(两个df的对应列), 返回一个Seriesfill_value=None
标量overwrite=True
.combine_first()
df
other 按照索引求并集, 优先保留左侧值
功能应用, 分组及窗口
.apply()
df
对df中的每一行(列)执行操作func
传入一个Series, 返回一个Seriesaxis=0
0或'index'
: 传入的是列1或'columns'
: 传入的是行
broadcast=False
是否广播, 对于聚合函数, 返回和传播值相同大小的对象raw=False
True: 传入函数的将是ndarray而不是Series(性能更好)reduce=None
True: 返回Series(若无法返回Series将返回df), False: 返回dfargs=()
其它位置参数传递给func**kwds
其它关键词参数传递给func
.applymap()
df
对每一个元素执行funcfunc
传入一个值, 返回一个值
.agg[regate]()
df
对每一列(行)执行某一操作func
'内置函数名'
: 对每一列(行)执行此操作(如'sum')function
: 要对每一列(行)执行的操作- ['内置函数名'] or [function] 对每一列(行)执行多个操作
dict
: {name: function or functions} 对对应列(行)执行对应操作
axis=0
0: 对每一列执行操作, 1:对每一行执行操作
*args
传递给函数的位置参数
**kwargs
传递给函数的关键词参数
.transfrom()
df
func 参考.agg*args
**kwargs
.groupby()
obj
对数据进行分组, 分组后使用sum之类的方法可以计算分组后的结果by
[c1, c2]: 选中某些列作为分组标准axis=0
轴level=None
多级索引的级别名称as_index=True
分组的列是否作为结果的索引sort=True
group_keys=True
squeeze=False
**kwargs
.rolling()
obj
指定窗口, 步长为1移动窗口, 可对窗口中内容分别进行运算, 比如.sum()windows
窗口大小(n行/列)min_periods=None
允许的最小窗口freq=None
center=False
是否将计算结果放到中心而不是右侧win_type=None
参考scipy.signal(默认所有点均匀加权)on=None
在指定列来计算滚动窗口而不是索引(此列将不参与计算)axis=0
轴closed=None
.expanding()
obj
累计计算, 比如加.sum()累加等min_periods=1
参考.rollingfreq=None
center=False
axis=0
.ewm()
obj
计算/描述统计
.abs()
df
对所有元素求绝对值, 仅适用于全为数字的对象.all()
S/df
判断每一列(行)是否全为Trueaxis=None
轴bool_only=None
是否仅计算bool类型的值skipna=None
level=None
用于指定多级索引**kwargs
.any()
S/df
判断每一列(行)是否存在True (参数同.all).clip()
df
限定取值范围(范围外的的将被更新为设定的最小值或最大值)lower=None
float或array_like. 最小值upper=None
最大值axis=None
轴inplace=False
是否本地修改*args
**kwargs
.clip_lower()
df
同.clip, 但只给出下限threshold
界限值
.clip_upper()
df
同.clip_lower, 但给出的是上限值.corr()
df
计算列的成对相关性, 不包括Na值method='pearson'
'pearson'
: 标准相关系数'kendall'
'spearman'
min_periods=1
.corrwith()
df
计算两个df之间的成对相关系数other
dfaxis=0
轴drop=False
.count()
S/df
统计, 统计非NaN的数量axis=0
轴 {0 or 'index', 1 or 'columns'}level=None
如果轴是MultiIndex, 则沿指定级别进行计数, 折叠到DataFrame中numeric_only=False
是否仅对 float, int, bool 类型数据进行统计
.cov()
df
计算列的成对协方差, 不包括NAmin_periods=None
每列所需的最小观察次数, 以获得有效结果
.cummax()
df
下面一个值更新为其上面最大的一个值(即累积最大值)axis=None
轴skipna=True
是否忽略空值, False: Na下面全部被更新为Na
.cummin()
df
参考.cummax(), 但更新为累积最小值.cumprod()
df
参考.cummax(), 但更新为累积积.cumsum()
df
参考.cummax(), 但更新为累积和.describe()
df
生成统计描述, count, mean, std, min, max, ...percentiles=None
输出相应的百分位数0~1, 默认 [.25, .5, .75]
include=None
返回到结果中的白名单(列)
'all'
: 所有列都将包含在输出中list_like
: 将结果限制为指定类型, np.number显示数字类型的统计结果, np.object显示对象类型的统计结果, 'O'显示字符串类型的统计结果None
: 结果将包含所有数字列
exclude=None
从结果中省略的黑名单, list_like or None
.diff()
df
下面的值跟上面的差periods=1
下面值跟上面第 periods 个值的差
axis=0
轴
.eval()
expr
'a+b'
: 返回df的a列与b列相加的结果'c=a+b'
: 新增一列c为a列与b列相加的结果'1+1'
: 返回1+1的结果
inplace=False
是否本地修改**kwargs
更多参数参考pandas.eval()
.kurt()
S/df
无偏峰度axis=None
轴skipna=None(True)
计算时是否排除空值level=None
如果轴是MultiIndex, 则沿指定级别进行计算, 返回dfnumeric_only=None
是否仅对 float, int, bool 类型数据进行计算
重新索引/选择/标签操作
.add_prefix()
df
prefix 将列标签前面加上前缀prefix.add_suffix()
df
suffix 将列标签前面加上后缀suffix.align()
tuple
更新索引并以(df1, df2)的形式返回, 缺失值以nan补全other
df或Seriesjoin='outer'
'outer'
: 新索引为s与s2的并集'inner'
: 新索引为s与s2的交集'left'
: 新索引为s的索引'right'
: 新索引为s2的索引
axis=None
轴level=None
指定多级索引的级别copy=True
是否返回新对象fill_value=None
缺失值使用的值, 默认为np.nanmethod=None
limit=None
fill_axis=0
broadcast_axis=N
沿该轴广播
.drop()
df
删除对应索引或标签labels=None
要删除的行(列), 单一标签或list_likeaxis=0
轴index=None
0.21新增, 相当于(label, axis=0)columns=None
0.21新增, 相当于(label, axis=1)level=None
指定多级索引的级别inplace=False
是否本地修改errors='raise'
'ignore': 忽略错误
.drop_duplicates()
df
删除重复项subset=None
列标签或标签序列, 只考虑识别选中列的重复项, 默认所有列keep='first'
'first'
: 仅保留第一次出现的副本(默认)'last'
: 删除重复项, 但最后一项除外False
: 删除所有重复项
inplace=False
是否本地修改
.duplicated()
df
返回是否是重复项的bool表示结果subset=None
列标签或标签序列, 只考虑识别选中列的重复项, 默认所有列keep='first'
'first'
: 除第一次出现外, 标记重复为True'last'
: 除了最后一次出现, 标记重复为TrueFalse
: 将所有重复项标记为True
.equals()
bool
other 判断两个df中的元素是否相同, 同位置的nan被识别为相同.filter()
df
子集查询items=None
list_like: [index or columns]like=None
string: 保留含有此字符串的那些 columns or indexregex=None
使用正则匹配axis=None
轴, 默认为columns
.first()
df
基于时间的子集查询offset
'10D': 表示取出前10天的数据
.head()
df
n=5
显示前n条数据.idxmax()
Series
返回请求轴上最大值对应的索引(或标签)axis=0
默认返回每一列最大值对应的索引, 标签作为索引, 查找到的索引作为值skipna=True
是否排除空值
.idxmin()
Series
同上不过是最小值.last()
df
同.first(), 不过是后n天.reindex()
df
根据新索引/标签返回数据, 原数据中存在的索引/标签对应的值将被返回, 新的索引/标签对应的值默认为nanlabels=None
新的标签/索引, 根据axis值来定, 默认索引index=None
新索引columns=None
新标签axis=None
轴method=None
{None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’}: 填充方法copy=True
是否返回一个新对象level=None
索引/标签级别fill_value=nan
缺失值填充limit=None
向前或向后填充的连续最大填充次数tolerance=None
公差???
.reindex_axis()
df
同 reindex() 不过没有 index 和 columns 参数.reindex_like()
df
新对象的 索引/标签 同传入的df的 索引/标签 相同other
传入的dfmethod, copy, limit, tolerance
.rename()
df
更改 索引/标签 名mapper=None
fun, dict-like: 结合axis使用, 表示 索引/标签index=None
更改索引columns=None
更改标签axis=None
轴copy=True
是否生成新对象inplace=False
是否本地修改level=None
多级索引的操作级别
.rename_axis()
df
同上: mapper, axis=0, copy, inplace.reset_index()
df
将索引作为df中的一列值level=None
多级索引, 操作的索引级别drop=False
是否删除索引转换出来的列inplace=False
是否本地修改col_level=0
如果columns是多级的, 转换出来的列的标签名的级别col_fill=''
指定多级索引其它级别的name, None表示重复索引名
.sample()
df
随机返回n个样本n=None
返回的项目数, 默认1frac=None
返回的百分比, 0.0-1.0, 不能与n同时使用replace=False
是否允许重复weights=None
None
: 等概率加权Series
: 相同索引的被设置为对应权重, 未出现的被设置为0
random_state=None
随机数种子axis=None
轴, 默认为0
.select()
df
返回满足条件的数据crit
function: 在每个 索引/标签 上调用, 返回 bool 的函数axis=0
轴
.set_index()
df
将某些列作为索引keys
column, [columns], [[跟df等长的其它来源索引]]drop=True
是否删除作为索引的那些列append=False
是否将列追加到现有索引inplace=False
是否本地修改verify_integrity=False
是否检查新索引, False会直到需要时再检查
.tail()
df
n=5
返回最后n行.take()
df
返回指定行/列indices
[int]: 返回指定的那些行/列axis=0
行/列convert=None
是否允许使用负指数, 默认True, 0.21.0 被取消, 始终允许is_copy=True
是否返回原始对象的副本**kwargs
.truncate()
before=None
截断此值之前的所有数据after=None
截断此值之后的所有数据axis=None
轴, 默认操作索引copy=True
是否拷贝
缺失数据处理
.dropna()
df
删除含有na的行(列)axis=0
轴how='any'
{'any', 'all'}thresh=None
有效值个数, 有效值低于此值的行(列)被删除subset=None
list_like. 列(行)标签列表, 只考虑列表中的列(行)inplace=False
是否本地修改
.fillna()
df
使用指定方法填充空值value=None
标量
: 使用此值替换na值dict/Series
: 对应标签的列按照对应的值填充df
: 对应为值的值填充对应位置
method=None
{‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}axis=None
{0 or ‘index’, 1 or ‘columns’}inplace=False
是否本地修改limit=None
每行(列)最大填充次数downcast=None
**kwargs
.replace()
df
将to_replace中给出的值替换为valueto_replace=None
str
: 字符串精确匹配regex
: 正则表达式匹配list
: 若value也是list则需相同长度, 一一对应替换dict
:None
:
value=None
参考.fillnainplace=False
是否本地修改limit=None
每行(列)最大填充次数regex=False
True: 将to_replace作为正则表达式解析method='pad'
{‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}axis=None
{0 or ‘index’, 1 or ‘columns’}
形状变换, 排序, 转置
.pivot()
df
重新整形数据(数据透视表), 参考pd.pivot()index=None
作为索引的列columns=None
作为列标签的列values=None
作为值的列
.reorder_levels()
new obj
对对及索引进行重排order
[str or int]: 按指定顺序对索引进行重排, 不能遗漏和重复axis=0
对哪里进行重排
.sort_values()
df
按值排序 0.17.0by
str or list of str: 在这些列上排序axis=0
{0 or ‘index’, 1 or ‘columns’}: 默认按行排序ascending=True
bool or bools: 是否按升序排序, 如果是bools则长度需和by相同inplace=False
是否在本地修改kind='quicksort'
{‘quicksort’, ‘mergesort’, ‘heapsort’}: 排序算法, 其它算法只支持单列na_position='last'
{‘first’, ‘last’}: 空值放在开头或结尾(默认放在结尾)
.sort_index()
df
对索引或列标签排序axis=0
默认对索引进行排序level=None
int or level name or list: 需要排序的索引级别ascending=True
是否升序排序inplace=False
是否本地修改kind='quicksort'
排序算法na_position='last'
{‘first’, ‘last’}: 空值放在开头或结尾(默认放在结尾)sort_remaining=True
按指定级别排序后是否对其他级别进行排序(按顺序)by=None
??
.nlargest()
df
对指定列进行降序排序并截取n个, 可结合groupby使用n
int: 截取的个数columns
list or str: 指定降序排序的列keep='first'
{‘first’, ‘last’}: 对于重复值保留第一次(或最后一次)出现的
.nsmallest()
df
同 .nlargest() 不过是升序排序.swaplevel()
new obj
对指定的两个索引级别进行交换i=-2, j=-1
int, stringaxis=0
对index还是对columns执行
.stack()
df/S
索引作为前n级索引, 最后一级columns作为第n+1级索引, 剩余columns作为新columnslevel=-1
int, string, list: 指定堆叠到索引的columns的级别dropna=True
是否删除没有有效值的行
.unstack()
df/S
将多级索引拆成新 index 和 columnslevel=-1
int, string, list: 要作为columns的索引级别fill_value=None
缺失值填充
.melt()
df
将columns作为某列值id_vars=None
作为id的列, 保持不变value_vars=None
作为值的列var_name=None
默认 'variable' columns名生成的列的列名value_name='value'
值列的列名col_level=None
如果columns是多级的则使用此指定级别进行操作
.T
df
转置.to_panel()
Panel
将df转换为 3D 的Panel.to_xarray()
.transpose()
df
*args, **kwargs 转置
组合/加入/合并
.append()
df
追按照列标签进行追加操作, 缺失使用nan填充other
df
ignore_index=False
是否不使用索引标签verify_integrity=False
是否不允许存在重复索引
.assign()
df
新增列**kwargs
列名 = func
: 传入df, 返回一列值的函数列名 = 标量
: 此列值都为此标量列名 = list_like
: 跟df同长度列名 = Series
: Series中跟df索引相同的作为新列的值, 缺失nan
.join()
df
新增列other
df
: 列标签不能跟左侧df重复(重复的话需设置suffix)`Series
: 需要有name属性list
: [df]
on=None
列名, 与右侧df索引对齐的列而不是索引how='left'
'left'
: 新df的索引参照左侧df'right'
: 新df的索引参照右侧df'outer'
: 新df的索引参照两个df索引的并集'inner'
: 新df的索引参照两个df索引的交集
lsuffix=''
若列标签重复, 左侧df的标签将被加上后缀rsuffix=''
若列标签重复, 右侧df的标签将被加上后缀sort=False
是否对结果按照索引排序
.merge()
df
可实现根据左右df某两列的值进行合并right
df
how='inner'
参考.joinon=None
左右两个df都存在的列, 将在此列上合并left_on=None
左侧df要与右侧df要对齐的列right_on=None
右侧df要与左侧df要对齐的列left_index=False
左侧df是否使用索引与右侧对齐right_index=False
右侧df是否使用索引与左侧对齐sort=False
结果是否按照索引排序suffixes=('_x','_y')
重复列后缀copy=True
是否生成新对象indicator=False
是否显示此行数据来源('left_only', 'right_only', 'both')
True
: 此列标签将被设置为'_merge'str
: 设置此列标签为此字符串
validate=None
0.21新增
.update()
df
将左侧df相应列相同索引的值更新为右侧的值, 不存在则保留原值(本地修改)other
df, 有name属性的Seriesjoin='left'
无其它取值, 此参数不能被设置为其它值overwrite=True
覆盖?????filter_func=None
raise_conflict=F
若两个df存在同一数据来源, 将报错