[工作必备]pandas数据分析处理52个常用技巧(下)

简介: [工作必备]pandas数据分析处理52个常用技巧

数据预览

# 在cmd中安装
pip install pandas-profiling   
import  pandas_profiling
pro = pandas_profiling.ProfileReport(data1)
pro.to_file('output_file.html')

变化百分比

# 元素变化百分比 每个元素与其前一个元素进行比较,并计算变化百分比
df.pct_change()

协方差

# 协方差,cov用来计算序列对象之间的协方差
s1.cov(s2)
df['a'].cov(df['b'])

相关性

# 相关性,pearson(默认),spearman和kendall之间的相关性
df['a'].corr(df['b'],method ='spearman')
print (frame.corr())

排名

s.rank() 或者 df.rank()  
# (axis=0)或列(axis=1)  
#  ascending=True 正向排名或者反向排名
#  method (average :并列组平均排名,min :组中最低排名,max :组中最高等级,first :按在数组中出现的顺序分配等级)

分组计算

# 多组运算
df.groupby(['班级','性别'])['身高'].agg([np.sum,np.mean,np.std])
df.groupby(['班级','性别']).agg({'身高':['min'],'体重':['max']})
df.groupby('flee').agg({'身高': [np.median, np.mean], 'signs': np.mean})
df.agg({'A':np.sum,'B':np.mean})  # 对不同列进行不同的计算
df[['A','B']].agg([np.sum,np.mean,np.min])  # 对多个变量进行多种计算
# 时间分组 ,先用pd.to_datetime(字段,格式)将某一列转成日期格式
df.groupby(df['生日'].apply(lambda x:x.year)).count()
# 分组后选第一个,一般数据先排序
df.groupby(df['生日'].apply(lambda x:x.year),as_index=False).first()       # Tail(n=1) head()
# 找到每组中只有一个数据的
df.groupby(df['生日'].apply(lambda x:x.month),as_index=False).filter(lambda x: len(x)==1)
data2.groupby('var').filter(lambda x:len(x)>=10)
data.groupby(data.index.year)['年龄'].mean()
# 加权平均
final3_1 = data_jiep.groupby(['产业线','模号']).apply(lambda g: np.average(g['平均节拍'], weights=g['模次'])).reset_index()
# groupby作图
data.groupby('race')['flee'].value_counts().unstack().plot(kind='bar', figsize=(20, 4))
data.groupby('flee')['age'].plot(kind='kde', legend=True, figsize=(20, 5))
# groupby中的几个函数
# 累计  
df.groupby('key').aggregate('min', np.median, max)
# 过滤   
df.groupby('key').filter(某个函数)
# 转换    
df.groupby('key').transform(lambda x: x- x.mean())
#通过某一个字段分组后,选另一个字段的最小值,构成的数据
df = pd.DataFrame({'AAA': [1, 1, 1, 2, 2, 2, 3, 3],'BBB': [2, 1, 3, 4, 5, 1, 2, 3]})
df.loc[df.groupby("AAA")["BBB"].idxmin()]
# 按照一个字段排序,另一个字段分组,选取第一个
df.sort_values(by="BBB").groupby("AAA", as_index=False).first()  #重新设置索引
# transform后数据大小不变
df["Order_Total"] = df.groupby('order')["ext price"].transform('sum')
result0 = data1.to_period('Q').groupby(level=0).apply(lambda x :len(x['var'].unique().tolist()))

交叉表

result1 = pd.crosstab(data.index,data['产业线'],margins=True)

数据透视表

df.pivot_table('价格',index='产地',columns='类别',aggfunc='max',margins=True,fill_value=0,margins_name='合计')
# 用字典形式,可不用values参数
df.pivot_table(index='sex', columns='class', aggfunc={'surviced':'sum', 'fare':'mean'})
result  = data.pivot_table(index=data3.to_period('M').index,columns= '是否异常',values='模号', aggfunc='count')
result1 = data.pivot_table(index= 'var1',columns=data['var3'].apply(lambda x: x.strftime('%Y')),
                      aggfunc='count',values='var2')

窗口函数

#索引需要为日期 对于明细数据,计算固定大小区域的指标
s = pd.Series(np.random.randn(1000),index=pd.date_range('1/1/2000', periods=1000))
s = s.cumsum()
r = s.rolling(window=60)   
# window:移动窗口的大小
# min_periods:需要的非空数据点的阈值(否则结果为NA)
# center:布尔值,是否将标签设置在中间(默认为False)
df['数量_re'] = df['数量'].rolling('7D').sum()
data1 = data.set_index('入库日期').groupby('供应商')['入库量'].rolling('7D').sum().reset_index()

标准化

# 当越小越好时
df['var_nor'] = (df['var'].max() - df['var']) / (df['var'].max() - df['var'].min())
# 当越大越好时
df['var_nor'] = (df['var'] - df['var'].min()) / (df['var'].max() - df['var'].min())
# 当中值为好是
df['var'] = np.abs(df['var']-标准值)
df['var_nor'] = (df['var'].max() - df['var']) / (df['var'].max() - df['var'].min())
# 可以写成通用函数
def f2(data,col):
    col_name = col + '_nor'
    data_gp = data.groupby('类别').mean()
    data_gp[col_name] = (data_gp[col] - data_gp[col].min() ) / (data_gp[col].max() - data_gp[col].min() )
    return data_gp

去掉异常值

def f2(data,col):
    q1 = data[col].quantile(q=0.25)     
    q3 = data[col].quantile(q=0.75)
    iqr = q3 - q1
    t1 = q1 - 3*iqr
    t2 = q3 + 3*iqr
    return data[(data[col]>t1)&(data[col]<t2)][['类别',col]]

正太分布和指数分布数据

data_norm = pd.DataFrame({'正太分布':np.random.normal(loc=60,scale=15,size=10000)})
data_exp = pd.DataFrame({'指数分布':np.random.exponential(scale=15,size=10000)+45})

随机选择

df['strategy'] = np.random.choice([1,2,3],99)

行列求和

# 增加列合计
df['合计']  = df.sum(axis=1)
# 增加行合计
df.loc['合计']  = df.sum(axis=0)

数据平移

data['经度_前1天'] = data.groupby('var')['经度'].shift(1)

宽表转窄表

test = pd.DataFrame(fake_data, columns=['subject', 'A', 'B', 'C'])
test
    subject    A    B    C
0    math      88   70   60
1    english   90   80   78
# 转换为窄表
pd.melt(test, id_vars=['subject'])
data3 = pd.melt(data2, id_vars=['var1','var2'])
     subject    variable    value
0    math       A           88
1    english    A           90
2    math       B           70
3    english    B           80
4    math       C           60
5    english    C           78

二维表

df.to_numpy()

改字典列表

datajs = data.to_json(orient='records',force_ascii=False)
# 名称,经度,维度,数值
[{"name":"虹桥火车站","lng":121.327908,"lat":31.20033,"value":3.5225437574},{"name":"上海火车站","lng":121.46396,"lat":31.255155,"value":7.0937954904}]

转字典列表

datajs = data.to_json(orient='records',force_ascii=False)
# 名称,经度,维度,数值
[{"name":"虹桥火车站","lng":121.327908,"lat":31.20033,"value":3.5225437574},{"name":"上海火车站","lng":121.46396,"lat":31.255155,"value":7.0937954904}]

两列较大值

df['z']=df[['x','y']].max(axis=1)

如果对你帮助, 欢迎点赞、关注

相关文章
|
10天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
33 0
|
2月前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas进行数据分析基础
使用Python和Pandas进行数据分析基础
56 5
|
4天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
14 2
|
11天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
24 1
|
2天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
2天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
1月前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
46 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
1月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
39 1
|
2月前
|
数据挖掘 Python
Pandas实战(1):电商购物用户行为数据分析
Pandas实战(1):电商购物用户行为数据分析
88 1
|
2月前
|
数据挖掘 Python
Pandas实战(3):电商购物用户行为数据分析
Pandas实战(3):电商购物用户行为数据分析
104 1
下一篇
无影云桌面