Pandas函数目录
“内容结构”变换
合并
merge
1 | DF = pd.merge( |
功能:合并操作,类似于sql的join操作
参数
on
:merge合并基准列,可以是多个列名称的list,df1、 df2仅有一列名称相同时可省略,否则返回空DF对象left_on
、right_on
:df1、df2合并基准列名称不同时 使用left_index
、right_index
:默认为False
,值为True
时使用索引作为基准进行合并(此时也可以使用df1.join(df2)
)how
:合并方式,默认是inner join,参数取值:’outer’ 、’left’、’right’(不知道能不能取’inner’,这个应该 是默认取值,可以使用)
其他
- df1、df2有多个列名相同且不全是合并基准列时,返回的 DF对象的重复列名称会改变
join
1 | DF = df1.join( |
说明:和其他DF对象进行join操作
参数
other
- 参数为Ser时,必须设置field名称
on
- 默认
None
,按照index-on-index进行join - 也可以按照col_name进行join
- 默认
how
:同上lsuffix
:df1重名列使用的后缀rsuffix
:df2重名列使用的后缀sort
:按照join-key排序
concat
1 | Df/Ser = pd.concat( |
说明:以某个轴为方向将多个Series对象或DF对象拼接
参数
objs
- dict作为参数值传递,排序后的keys传递给
keys
- dict作为参数值传递,排序后的keys传递给
join
:处理其他轴的方式(其他轴长度、命名不同)join_axes
:指定其他轴的indexingore_index
:默认False
,为True
拼接后的DF的 Index将为RangeIndexkeys
:指定构建多级索引最外层Indexlevels
:用于构建多重索引的具体层级,默认从keys
推断names
:返回DF对象索引名称verify_integrity
:默认False
,不检查返回DF对象 是否含有重复indexcopy
:默认拷贝数据
其他
pd.concat
只涉及拼接方向,而merge只能沿列数增加的 方向“拼接”pd.concat()
时即使有相同的列名称、index序号也不会 重命名pd.concat(axis=1,...)
和pd.merge(left_index=True, right_index=True,...)
的 作用应该是一样的,只是不会将相同的列名称重命名pd.merge
可以指定合并基准列,而pd.concat
只能按 Index“合并”,且只能inner join或时outer join
注意事项
pd.concat
默认会对索引进行排序,所以若索引包含不可 比较元素则会报错,尤其是在多重索引情况下改变索引类型规避
1
2
3
4# 改为categorical索引
df.index.astype("categorical")
# 改为str类型
df.index.astype(str)reset索引规避
1
2df_new = pd.cancat([df1.reset_index(), df2.reset_index()])
df_new = df_new.set_index(col_name)
pd.concat
连接会尝试转换数据类型,如:pd.Timestamp
可能会被转换为int
combine_first
1 | Ser = ser1.combine_first(other(Ser)) |
- 说明:和其他DF/Ser进行元素级别的combine,即填充NULL
元素
- 元素级别
- 返回对象包含所有的index
增、删
drop
1 | DF/None = df1.drop( |
说明:删除df1某轴上的labels
参数
columns
/index
:替代axis
+label
指定需要删除的 列/行
[new_col_name]
1 | df1[new_col_name] = list |
- 说明:添加新列/行
.iloc[new_index_name]
不可用
append
1 | DF = df1.append( |
- 说明:将
other
行追加到df1
del
1 | del df1[col_name] |
形、态变换
形状
stack
1 | DF/Ser = df1.stack( |
说明:旋转
level
级列索引参数
dropna
:默认剔除返回DF/Ser对象中NULL行
unstack
1 | DF/Ser = df1.unstack( |
说明:旋转
level
级行索引参数
fill_value
:替换NaN的值
其他
- 两个函数好像都有排序操作,
df1.unstack().stack()
会 合并层级索引
- 两个函数好像都有排序操作,
排序
sort_index
1 | DF = df1.sort_index( |
说明:按照labels排序
参数
kind
:排序方法na_position
:默认将NaN放在开头- 对多重索引无效
sort_remaining
:默认依次对剩余层级排序
sort_value
1 | DF = df1.sort_value( |
- 说明:依某labels(行、列)值排列
rank
1 | DF = df1.rank( |
说明:沿轴计算数值型数据的rank
- rank值相同者取rank值平均
参数
method
average
:组(延轴分组)rank平均min
/max
:组内最小/大first
:label出现顺序优先dense
:类似min
,但是rank值总是增加1
numeric_only
:默认不考虑含有非数值型数据label- 但是文档上确实写默认值为
None
- 但是文档上确实写默认值为
na_option
keep
:NaN值rank值不变top
:NaN作为“小”值bottom
:NaN作为“大”值
ascending
:默认小值rank值小pct
:默认不计算rank值占比
take
1 | DF = df1.take( |
说明:按照indices对应的labels顺序返回DF
参数
indices
:指明返回indices、及其顺序- indices是指行数,不是labels
- 可以为负值indice,类似list
convert
:是否处理负值indice(将废除,均处理)is_copy
:默认创建副本返回
reindex
1 | DF = df1.reindex( |
说明:将DF对象转换有其他Index的对象
- 可以包含之前没有的labels
- 类似于labels版本
.take
,是选择不是重命名
参数
labels
:新Index,配合axis
决定替换轴index
/columns
:两根轴的Indexmethod
:新labels值填补方法- 用于填补的值不一定会出现在返回DF对象中,可能是 使用原DF对象中未被选择labels
copy
:默认拷贝副本fill_value
:新labels值填补值limit
:允许最长连续使用method
方法填补值tolerance
:使用method
方法填补新labels值时,用于 填补labels和新labels的最大差距- 超过
tolerance
则为默认NaN
- 超过
数据处理
简单统计
1 |
|
value_count
1 | Ser = pd.value_counts( |
说明:计算hisgram
参数
sort
:默认按值排序normalize
:默认不正则化(计算相对histgram)bins
:hisgrams划分bins- 默认每个值划分为一个bins
- 给出
int
时表示数目,(min, max]
均等分 - 给出
[num]
计算列表内数量(范围外不考虑)
dropna
:默认不计算NaN值个数
quantile
1 | Ser/DF = df1.quantile( |
说明:计算
q
分位数参数
q
:分位,可以是列表,计算多个分位数interpolation
:分位数计算方式(分位数位i、j间)linear
:i+(j-i)*fraction
(线性回归)low
:i
high
:i+1
nearest
:i
、i+1
中近者midpoint
:(i
+j
)/2
元素级
Apply
apply
1 | DF/Ser = df1.apply( |
说明:对
df1
沿轴方向labels应用func- 可以用于DFGB对象
- 为聚合函数时返回DF对象Index为groupby键,类似于
agg
- 非聚合函数时返回DF对象为原Index,类似于
transform
,但包含用于groupby的label - 但是此时其他参数无法使用,
func
也仅能为单一 function,而agg
可以使用各种
- 为聚合函数时返回DF对象Index为groupby键,类似于
- 可以用于DFGB对象
参数
broadcast
:仅对aggregation(聚合)函数,默认不保持 原shape- 0.23.0 deprecated
raw
:默认不是将label作为ndarray对象传递,而是保持 Series对象- 如果函数处理nadarry对象,
True
性能更好
- 如果函数处理nadarry对象,
reduce
:默认根据函数判断是否返回DFFalse
:尽量返回DF对象- 0.23.0 deprecated
result_type
expand
:返回DF对象reduce
:尽量返回Ser对象broadcast
:保持原shape返回- 0.23.0 new
args
:传递给func
的VAR_POSITIONskwargs
:传递给func
的VAR_KEYWORDs
agg
1 | DF = df1.agg( |
说明:聚合
- 可以用于DFGB,必然返回DF,因此要求函数结果必须
聚合
- 如果分组结果都只有单个label,函数可以非聚合
- 如果分结果中由多label分组,函数必须聚合
- 可以用于DFGB,必然返回DF,因此要求函数结果必须
聚合
参数
func
- dict键应为column labels,值为function
transform
1 | DF = df1/dfgb1.transform( |
- 说明:返回应用
func
处理后DF- 应用于DF对象时,等同于
axis=0
的agg
、apply
- 应用于DFGB对象时,无价值,和应用于原DF对象结果一样, 仅剔除groupby label
- 应用于DF对象时,等同于
替换
replace
1 | DF = df1.replace( |
说明:替换
参数
to_replace
:被替换对象- str/regex/num:匹配str/regex/num的值被替换为
value
- [ ]
value
也为list时,长度必须相同- str元素可看作regex
- {}
- nested dict顶层键匹配列label,然后应用对应
子dict进行匹配(此时包含
value
功能) - 非顶层键可以为regex
- nested dict顶层键匹配列label,然后应用对应
子dict进行匹配(此时包含
- None:此时
regex
必为str/[]/{}/Ser
- str/regex/num:匹配str/regex/num的值被替换为
value
:替换值- str/num:替换值
- {}:键匹配列label然后替换值,无匹配保持原样
- [ ]:长度必须和
to_replace
相同
limit
:允许最长连续bfill、ffill替换regex
- 为
True
时,to_replace
、value
将作为regex - 代替
to_replace
作regex替换
- 为
method
:to_replace
为list时替换方法
说明
to_replace
为{regex:str}时,只替换DF中str匹配的部分 ,如果需要替换整个str,需要^.*str.*$
匹配整个str- 但为{regex:int}时,不需要
^.*str.*$
也会匹配整个str 并替换为int
where
1 | df = df1.where( |
说明:mask
True
,替换False
为other
值,默认(other
中无法找到对应值)NaNcond
、other
是按照[index][col]
对应位置,而不是 打印位置
参数
cond
- DF(bool):
True
保持原值不变,False
从other
替换 - callable:应用在
df1
上,返回DF(bool),不应改变 `df cond
不提供位置视为被替换1`
- DF(bool):
other
- num:替换为num
- DF:替换值
- callable:应用在
df1
上,返回DF用于替换
axis
:alignment axis if neededlevel
:alignemnt level if needederrors
raise
:允许raise exceptionsignore
:suppress exceptions,错误时返回原对象
try_cast
:默认不尝试将结果cast为原输入
mask
1 | DF = df1.mask( |
- 说明:
True
、False
mask规则同where
相反,其他同
筛选
isin
1 | DF = df1.isin( |
说明:判断元素是否存在于
values
中参数
values
- iterable:元素在iterable中为
True
- {}:
df1
元素在dict中对应键值中存在为True
- DF:
df1
元素在DF对应index、columns labels存在 才为True
- iterable:元素在iterable中为
类型转换
to_numeric
1 |
|
说明:转换为numeric类型
参数
errors
raise
:无效值将raise exceptioncoerce
:无效值设为NaNignore
:无效值保持原样
downcast
:根据参数downcast值为“最小”类型- downcast过程中exception不受
errors
影响
- downcast过程中exception不受
to_datetime
1 | Ser = pd.to_datetime( |
说明:转换为datetime
参数
dayfirst
:处理类”10/11/12”,设置day在前yearfirst
:处理类”10/11/12”,设置year在前utc
:默认不返回UTC DatatimeIndexbox
True
:返回DatetimeIndexFalse
:返回ndarray值
format
:parse格式,如”%d/%m/%y %H:%M:%S”exact
:默认要求arg
精确匹配format
unit
:arg
传递数值时作为单位infer_datatime_format
:在format
为None
时,尝试 猜测格式,并选择最快的方式parse,耗时5~10倍origin
:决定参考(起始)时间unix
:起始时间:1970-01-01julian
:4714 BC 1.1(此时unit
必须为D
)
infer_objects
1 | DF = df1.infer_objects() |
- 说明:soft转换数据类型,无法转换保持原样
astype
1 | DF = df.astype( |
说明:强制转换为
dtype
类型参数
copy
:默认返回拷贝kwargs
:传递给构造函数的参数
Ser
map
1 | Ser = ser1.map( |
说明:对Ser中元素进行映射
- map对无法配置(dict)返回None而不是保持不变
参数
arg
- {}:对Ser中值根据键值对映射
- callable:对元素应用callable
no_action
:默认对NA也处理,否则忽略
其他
- 好像默认会应用类似于
apply(convert_type=True)
,如 直接取值是np.float64
类型,传给函数就变成了float
类型
- 好像默认会应用类似于
apply
1 | Ser = ser1.apply( |
说明:在Ser上应用
func
参数
func
- {}:返回多重索引Ser,键作为顶层索引,不是对 不同值应用不同方法
- [ ]:返回DF对象,列labels根据list元素命令,list 元素不能聚合、非聚合混合
convert_type
:默认转换为合适的类型,否则设为dtype=object
agg
1 | Ser = ser1.agg( |
- 说明:好像和
apply
完全相同,只是参数不同,但axis
没用
分组
cut
1 | Ser = pd.cut( |
说明:返回各个元素所属区间,同时也是对应indice
参数
bins
:左开右闭- int:将
x
等分(事实上为了包含最小值,bins
左边界会扩展.1%) - [num]:定义
bins
边界
- int:将
right
:默认包含right-most边界labels
:指定生成bins的labelsretbins
:默认不返回bins,设为True
将返回tupleprecision
:bins labels显示精度include_lowest
:第一个bin是否应该包括最小值- 应该仅对
bins=[]
有效 - 设为
True
仍然为左开右闭区间,但是左边界会小于bins=[]
中的最小值
- 应该仅对
qcut
1 | Ser = pd.qcut( |
说明:将
x
按照q
划分分位数后进组(即按照数量分组)参数
q
- int:划分int个等分位数
- [num]:将
x
元素按照给出分位数分组
duplicates
raise
:bins边缘不唯一raise exceptiondrop
:bins边缘不唯一则丢弃不唯一值
groupby
1 | DFGB = df1.groupby( |
说明:根据
by
对DF分组参数
by
- func:应用于DF的Index上,结果作分组依据
- dict/Ser:对Index作映射,映射结果作分组依据
- array-like:其值依顺序标记DF行,据此分组,因此 要求长度必须和DF行数相同
- col_name/[col_name]:根据col_name分组
as_index
:默认使用分组依据作为分组Index(labels)sort
:默认组内各保持原DF顺序,可以关闭获得更好性能group_keys
:默认在calling apply时,添加group键用于 标识各组squeeze
:为True
时尽可能减少返回值维度,否则返回 consistent type
Index
Index值
pivot
1 | DF = df1.pivot( |
说明:根据某列值reshape数据(创建一个枢)
参数
index
:用作Index的列名,默认Indexcolumns
:用作Column的列名values
:填充进新DF对象的列名,默认所有剩余所有列 (列索引为层级索引)
其他
- 但是如果选取的两列元素两两组合有重复回报错
set_index
1 | DF = df1.set_index( |
说明:用一列/多列作为新DF的Index(row labels)
参数
keys
:列名,列名列表drop
:默认删除用作Index的列append
:默认不保留原Index(不以添加方式设置 Index)verify_integrity
:默认不检查新Index是否唯一,直至 必要的时候
reset_index
1 | DF = df1.reset_index( |
说明:
参数
level
:默认所有层级drop
:默认将Index作为一列添加col_level
:Index作为列添加进的列索引层次,默认 最高层col_fill
:对于多级索引,Index作为列添加时其他层级 的命名,默认xtts
其他
- Index作为新列的名称默认为”index”/“level_0”、 “level_1”等
Index属性
swaplevel
1 | DF = df.swaplevel( |
- 说明:交换i、j两层索引
rename
1 | DF = df.rename( |
说明:修改labels(行、列名)
参数
mapper
:labels的重命名规则index
/columns
:行、列labels重命名规则mapper
+axis
index
columns
copy
:默认复制数据inplace
为True
时,此参数无效
level
:默认重命名所有level
add_prefix
1 | DF = df.add_prefix( |
- 说明:为列labels添加前缀
特殊值
重复
unique
1 | bool = ser1.is_unique |
duplicated
1 | Ser(bool) = df1.duplicated( |
说明:返回标识“副本(元素相同)”行的Ser(bool)
参数
subset
:默认检查所有列,否则检查指定列keep
first
:重复者除第一个外标记为True
last
:重复者除最后一个外标记为True
- False:重复者均标记为
True
1 | DF = df1.drop_duplicates( |
空
null
1 | DF(bool) = df1.isnull() |
dropna
1 | DF = df1.dropna( |
说明:剔除空labels(及其数据)
参数
how
:默认any NaN值存在剔除labelthresh
:剔除label的NaN值阈值subset
:指定考虑的labels
fillna
1 | DF = df1.fillna( |
说明:填补NaN值
参数
value
:用于填补NaN的值,dict-like时无法找到的NaN 不被填补method
- “pad”/“ffill”:使用last(前一个)值填补
- “bfill”/“backfill”:使用next(后一个)值填补
limit
:填补允许的最大连续NaN值,超过部分保留NaNdowncast
:数据类型精度降级dict,或者"infer"
由 自行推断
其他
any
1 | Ser = df1(bool).any( |
说明:label(行、列)对应值存在真返回True
参数
skipna
:默认skip NA,如果全label为NA则结果为NAlevel
:默认考虑整个索引bool_only
:默认将所有转换为bool值再做判断