本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
1D: 一维数据
数据操作
.melt()
df
将df转换为标签和值两列, api中有举例frame
DataFrameid_vars=None
list_like: 保留, 不转换的列value_vars=None
list_like: 转换的列, 默认转换除id_vars外的所有列var_name=None
存储标签的列的列名, 默认名字variablevalue_name='value'
存储值的列的列名col_level=None
如果是多及索引则可用于指定使用的索引级别, 默认全部使用, 会生成多列标签列
.pivot()
df
index
ndarray, Series, 不可以是列表, 三个参数长度要一致, 含几个不重复值就表示有多少行, 每个值重复次数必须一致, 且等于列数, 且index重复值相应位置columns必须是非重复值columns
同上, 不过是列标签values
ndarray, Series
>>> pd.pivot( index=np.array(['one', 'one', 'one', 'two', 'two', 'two']), columns=np.array(['A', 'B', 'C', 'A', 'B', 'C']), values=np.array([1,2,3,4,5,6])) out: A B C one 1 2 3 two 4 5 6
.pivot_table()
df
数据透视表data
dfvalues=None
需要计算的那些列index=None
作为索引的列columns=None
作为列标签的列aggfunc='mean'
对values的计算方式fill_value=None
用来代替缺失值的值margins=False
结果是否显示总计行/列dropna=True
不包含结果都是NaN的列margins_name='All'
margins=True时总计行/列的名称
>>> df out: A B C D 0 foo one small 1 1 foo one large 2 2 foo one large 2 3 foo two small 3 4 foo two small 3 5 bar one large 4 6 bar one small 5 7 bar two small 6 8 bar two large 7 >>> pd.pivot_table(df, values='D', index=['A', 'B'],columns=['C'], aggfunc='sum', margins=True) out: C large small All A B bar one 4.0 5.0 9 two 7.0 6.0 13 foo one 4.0 1.0 5 two NaN 6.0 6 All 15.0 18.0 33
.crosstab
df
类似于pivot() + pivot_table().cut()
x
list_like
: 一维bins
int
: 由最小和最大值计算等长面元分为n份list_like
: [0,3,5]表示按(0,3],(3,5]进行划分
right=True
True: 左开右闭; False: 左闭右开labels=None
划分结果显示的标签, False: 用range(n)标号retbins=False
是否返回bins设置的值(矢量, 整数会转换成对应的矢量)precision=3
存储和显示分类标签的精度(默认3)include_lowest=False
False:第一个间隔不包括左侧值,如(0,3]不含0. True:(<0,3]
.qcut()
x
list_like: 一维q
int
: 按q分位数进行切割list_like
: 分位数, 如[0, 0.5, 1]表示0%~50%, 50%~100%
labels=None
划分结果显示的标签, False: 用range(n)标号retbins=False
是否返回bins设置的值(矢量, 分位数会转换成对应的矢量)precision=3
存储和显示分类标签的精度(默认3)duplicates='raise'
'raise'
: 如果bin值不是唯一的, 则引发错误'drop'
: 忽略重复值
.merge()
df
根据两个df某列进行合并left
dfright
dfhow='inner'
'inner'
: 取键的交集'left'
: 保留左键的完整'right'
: 保留右键的完整'outer'
: 取键的并集
on=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新增'one_to_one' or '1:1'
: 检查合并键在左右数据集中是否唯一'one_to_many' or '1:m'
: 检查合并键在左侧数据集中是否是唯一的'many_to_one' or 'm:1'
: 检查合并键在右侧数据集中是否是唯一的'many_to_many' or 'm:m'
: 不做检查
.merge_ordered()
df
根据两个df某列进行合并, 并对缺失值按要求填充left
dfright
dfon=None
左右两个df都存在的列, 将在此列上合并left_on=None
左侧df要与右侧df要对齐的列right_on=None
右侧df要与左侧df要对齐的列left_by=None
按选中的列分组, 填充将按照分组执行right_by=None
按选中的列分组, 填充将按照分组执行fill_method=None
{'ffill', None} 数据的插值方法suffixes=('_x', '_y')
重复列后缀how='outer'
{'left', 'right', 'outer', 'inner'}
.merge_asof()0.19.0
df
合并两个df, 但不再是根据相等合并而是与离左侧最近的合并left
dfright
dfon=None
左右两个df都存在的列, 将在此列上合并. 必须有序而且要是数字列(时间, int, float)left_on=None
左侧df要与右侧df要对齐的列right_on=None
右侧df要与左侧df要对齐的列left_index=False
左侧df是否使用索引与右侧对齐 0.19.2right_index=False
右侧df是否使用索引与左侧对齐 0.19.2by=None
left_by=None
right_by=None
suffixes=('_x', '_y')
重复列后缀tolerance=None
allow_exact_matches=True
direction='backward'
.concat()
S/df
多个S/df进行合并操作, axis=0 时相同标签的列对应追加, axis=1 时相当于合并列objs
[S/df]axis=0
{0/’index’, 1/’columns’}: 操作轴join='outer'
{‘inner’, ‘outer’}: 做交集还是并集join_axes=None
[index]:ignore_index=False
True: 将不使用原索引而是使用 0 ~ n-1keys=None
新增一个最外层索引, 数量跟合并的 S/df 数量一致levels=None
names=None
[index_name]: 合并结果的多级索引名verify_integrity=False
检查新的连接轴是否有重复项copy=True
如果为False则不进行没有必要的数据复制
.get_dummies()
df
将元素作为标签, 用0和1表示相应索引位置是否是次元素data
list_like, Series, dfprefix=None
多列值加上相应前缀prefix_sep='_'
前缀跟值之间的分隔符dummy_na=False
是否显示空值结果columns=None
列名sparse=False
是否返回稀疏结果drop_first=False
删除第一个元素生成的列
.factorize()
Tuple
将传入的值返回成一个 (labels, uniques)values
1Dsort=False
是否对值进行排序order=None
na_sentinel=-1
size_hint=None
提示哈希表大小
.unique()
ndarray
values 1D
: 返回无重复值的结果.wide_to_long()
df
提取并合并指定字符串开头的列df
DataFramestubnames
str, [str]: 提取以指定字符串开头的列i
column: 用作索引的列j
提取开头后剩余的内容会生成一列, 在此指定此列名sep=''
分隔符 0.20suffix='\\d+'
捕获正则表达式匹配的后缀 0.20
缺失数据
isna()
bool/[bool]
obj 判断给定对象的元素是不是空值isnull()
bool/[bool]
obj 判断给定对象的元素是不是空值notna()
bool/[bool]
obj 判断给定对象的元素是不是非空值notnull()
bool/[bool]
obj 判断给定对象的元素是不是非空值
转换
.to_numeric()
S/ndarray
将给定数据转换为数字类型arg
1Derrors='raise'
'raise'
: 无效的解析将引发异常'coerce'
: 无效的解析将被设置为NaN'ignore'
: 无效的解析将返回输入
downcast=None
向下转换 0.19.0'integer' or 'signed'
: 最小有符号int类型 (np.int8)'unsigned'
: 最小无符号int类型 (np.uint8)'float'
: 最小浮点数类型 (np.float32)None
: np.float64
处理日期时间
.to_datetime()
arg
integer, float, string, datetime, 1Derrors='raise'
'raise'
: 无效的解析将引发异常'coerce'
: 无效的解析将被设置为NaT'ignore'
: 无效的解析将返回输入
dayfirst=False
是否将输入数据认为是 天-月-年 的格式识别yearfirst=False
是否将输入数据认为是 年-月-天 的格式识别utc=None
box=True
True
: 返回DatatimeIndexFalse
: 返回ndarray
format=None
时间解析格式, %d%m%Yexact=True
True
: 需要精确的匹配格式False
: 允许格式匹配目标字符串中的任何位置
unit=None
当输入整数或浮点数的时候, 用此参数指定单位(D,s,ms,us,ns), 默认 'ns'infer_datetime_format=False
True 且没有给出格式, 将尝试推断字符串格式, 并且如果可以推断, 则切换到解析它们的更快方法origin='unix'
定义参考日期, 那么整数或浮点数将按照从此日期开始计算
.to_timedelta()
arg, unit, box, errors
参考.to_datetime()
.data_range()