Pandas
基础
数据类型
- df.dtypes 查看字段数据类型
- df[‘a’].astype(‘float’) 数据类型转化
透视表功能
df.groupby
(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=NoDefault.no_default, observed=False, dropna=True) @level : 当df是多维度索引时,可以用level参数进行第i层索引聚合
- 常规用法:df.groupby(['col1','col2']).mean()
- 不同字段实现不通聚合-基础
f = {'ado':['sum'], 'seller':['count']}
df.groupby('country').agg(f)
- 不同字段实现不通聚合-改名
df.groupby('country').agg(
ado_sum=('ado','sum'),
seller_cnt=('seller','count'),
ado_range=('ado',lambda x: x.max()-x.min()
)
pd.pivot_table 更像透视表
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True) <==>df.pivot_table(values, index...)
table = pd.pivot_table(df, values='D', index=['A', 'B'],
columns=['C'], aggfunc=np.sum, fill_value=0)
table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],
aggfunc={'D': np.mean,
'E': [min, max, np.mean]})
pd.pivot: reshape data
pandas.pivot(data, index=None, columns=None, values=None) 没有聚合函数,仅是row转column,不能有重复的行列
combining data
pd.merge(df1, df2, how, on) <==> df1.merge(df2, how, on)
pd.merge(right, how=‘inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(‘_x’, ‘_y’), copy=True, indicator=False, validate=None)
默认重叠列拼接 @how : {‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’}, default ‘inner’ @on/left_on/right_on :join的key @suffixes : 相同字段的后缀
df1.join(other_df2, on=None, how='left', lsuffix='', rsuffix='', sort=False 功能与merge类似
默认行索引拼接,重叠列拼接(没啥区别?) @how : {‘left’, ‘right’, ‘outer’, ‘inner’}, default ‘left’ @sort : 是否根据连接的键进行排序
pd.concat() 用于多个df行方向/列方向的拼接 pandas.concat(objs, axis=0, join=‘outer’, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
@objs :[df1,df2,…] @axis :=1时,会根据索引进行拼接 @join : {‘inner’, ‘outer’}, default ‘outer’ @ignore_index :True, 会重新索引 @key :指定用作“层次化索引”各级别上的索引 @name :行索引的名字 特殊应用:pd.concat([pd.DataFrame([i], columns=['A']) for i in range(5)], ignore_index=True)
DataFrame.append( other , # 待合并的数据。可以是pandas中的DataFrame、series,或者是Python中的字典、列表这样的数据结构 ignore_index =False, verify_integrity =False, # 默认是False,如果值为True,创建相同的index则会抛出异常的错误 sort =False)
高阶用法
missing data
@axis : {0 or ‘index’, 1 or ‘columns’}, default 0 @how : {‘any’, ‘all’}, default ‘any’ @thresh : int, optional(至少几个非空保留) @subset : index / columns (哪几列/行判断是否NA) @replace : bool, default False
df.fillna() df.isnull() df.notna() df.replace("a","b")
(to_replace=None, value=NoDefault.no_default, inplace=False, limit=None, regex=False, method=NoDefault.no_default) @to_replace : 待替换掉的数据(str, regex, list, dict, Series, int, float, or None都可以;正则也行) @value : 用value来替换掉to_replace @method :{‘pad’, ‘ffill’, ‘bfill’, None},当value为空时,ffill靠前面的填充;bfill靠后面的填充;pad?
duplicate data
s3.unique() #Return unique values,series去重,df不行df.duplicated(subset=None, keep='first') # check duplicates
@subset : index / columns (哪几列/行判断是否重复) @keep : {‘first’, ‘last’, False} (保留前值还是后值) @return: T/F first表示第二次出现为重复值(标记为T);last表示前面出现为重复值(标记为T);false表示每个都为重复值
df.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False) # drop duplicates
@ignore_index : 重新索引
Numpy
|