开发者

python常见统计分析处理函数解读

开发者 https://www.devze.com 2024-08-10 11:05 出处:网络 作者: DB_UP
目录一、分组统计1、分组后对不同指标统计分析2、数据框中多列同时乘以同一列编程客栈值计算二、重要函数(apply、map、filter、query、replace、reduce)1、对数据框下的列进行统计分析:apply+lambda函数2、数据类
目录
  • 一、分组统计
    • 1、分组后对不同指标统计分析
    • 2、数据框中多列同时乘以同一列编程客栈值计算
  • 二、重要函数(apply、map、filter、query、replace、reduce)
    • 1、对数据框下的列进行统计分析:apply+lambda函数
    • 2、数据类型转换(float—int):map()函数
    • 3、数据筛选filter()函数
    • 4、np.where和query
    • 5、replace替换(两种:对每个记录修改,记录中数据修改)
    • 6、reduce函数
  • 三、行/列相关操作
    • 1、删除列/行操作
    • 2、 查找某列特征数据(字符型)
    • 3、列重命名
    • 4、包含某个特殊字符的列:contains()
    • 5、筛选需要的行业数据:存在isin()/不存在
    • 6、根据某几列数据排序sort_values()
    • 7、统计gram列每种语言出现的次数
    • 8、将空值用上下值的平均值进行填充
    • 9、交换两列的位置
    • 10、新增一列根据salary将数据分为三组
    • 11、将两列合成一列
    • 12、拆分某列,生成新的Dataframe
    • 13、多列减去一列
  • 四、数据框
    • 1、对数据框按照分组进行标准化
    • 2、数据透视表
    • 3、统计指标0和空值数据
    • 4、检查数据中是否含有任何缺失值
    • 5、数据向前/后移动5天
    • 6、按周采样,取一周最大值
    • 7、计算前一天与后一天变化率
    • 8、将小数转化为百分数
    • 9、列表生成式:新增数据列
    • 10、新建excel写入数据
  • 五、时间数据
    • 1、时间范围区间选择:date_range
    • 2、将time列时间转换为月-日(月、年月日)
    • 忽略警告
  • 总结

    一、分组统计

    1、分组后对不同指标统计分析

    df=data.groupby(['city','date']).agg({'tem':np.mean, "tem_max":np.max, "tem_min":np.min})
    la=launch.groupby(['user_id','launch_day'],as_index=False).agg({'launch':'sum'})#as_index得到的表格就没有使用group_id作为索引
    _funcs = ['mean', 'std', 'sum']
    ##遍历每一种统计指标
    for _func in _funcs:
        # 对每一个样本计算各项指标
        df[f'P2_C2-C5_{_func}'] = raw[['A10', 'A12', 'A15', 'A17']].agg(_func, axis=1)

    2、数据框中多列同时乘以同一列值计算

    def calculate_profit(load_price):
        """计算利润"""
        # 定义利润计算函数
        # 计算各个季节的利润
        for season in ['春季', '夏季', '秋季', '冬季']:
            column_name = f'{season}充放电负荷'
            profit_column_name = f'{season}利润'
            load_price[profit_column_name] = load_price.apply(lambda row: row[column_name] * row['电价'], axis=1)
        return load_price

    二、重要函数(apply、map、filter、query、replace、reduce)

    1、对数据框下的列进行统计分析:apply+lambda函数

    Weekday_Spring_Autumn['weekday_mean']=Weekday_Spring_Autumn.apply(lambda x: x.mean(),axis=1)

    2、数据类型转换(float—int):map()函数

    map 函数,它接收两个参数,第一个参数是一个函数对象 (当然也可以是一个lambda表达式),第二个参数是一个序列。

    map(lambda x: x*2,[1,2,3,4,5])
    #输出:[2,4,6,8,10]
    #可以很清楚地看到,它可以将后面序列中的每一个元素做为参数传入lambda中。
    normal.iloc[:,0]=normal.iloc[:,0].map(int)
    df['time_interval_begin'] = pd.to_datetime(df['time_interval'].map(lambda x: x[1:20]))
    df_trn['A25'] = df_trn['A25'].replace('1900/3/10 0:00', 70).astype(int)

    2.1、删除数据间空格 map+strip

    使用strip函数:#删除左右两边空格
    df2['Chinese']=df2['Chinese'].map(str.strip)
    #删除左边空格
    df2['Chinese']=df2['Chinese'].map(str.lstrip)
    #删除右边空格
    df2['Chinese']=df2['Chinese'].map(str.rstrip)
    有某个特殊的符号,$,我们想把这个删掉
    df2['Chinese']=df2['Chinese'].str.strip($S)
    result_owner.card=result_owner.card.map(lambda x:x.lower()) #身份证字母大写改小写
    result_card=result_owner[result_owner['card'].str.len()==18] #删除身份证不是18位,匹配位18位
    result_card_new['年龄']=[(2021-int(float(x[6:10]))) for x in result_card_new['card']] #年龄

    3、数据筛选filter()函数

    flter 函数,和map 函数相似。同样也是接收两个参数,一个lambda 表达式,一个序列。

    它会遍历后面序列中每一个元素,并将其做为参数传入lambdjavascripta表达式中,当表达式返回 True,则元素会被保留下来,当表达式返回 False,则元素会被丢弃。

    cols_timer = list(filter(lambda x: x.endswith('t'), df_trn_tst.columns))

    4、np.where和query

    np.where(condition, x, y) #满足条件(condition),输出x,不满足输出y,只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标
    duration = np.where(duration < 0, duration + 24*60, duration)
    df_trn.query('收率 > 0.8671')

    5、replace替换(两种:对每个记录修改,记录中数据修改)

    '''G3i修改为G3'''
    result_dfa['vehicles']=[result_dfa['vehicles'].iloc[i].replace('G3i','小鹏G3') for i in range(len(result_dfa))]
    result_dfa['brand']=result_dfa['brand'].replace(['天津一汽丰田','四川一汽丰田(长春丰越)'],'一汽丰田')

    6、reduce函数

    reduce 函数,也是类似的。它的作用是先对序列中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 lambda 函数运算,将其得到的结果再与第四个元素进行运算,以此类推下去直到后面没有元素了。

    python常见统计分析处理函数解读

    reduce(lambda x,y:x+y,[1,2,3,4])
    #输出:15

    三、行/列相关操作

    1、删除列/行操作

    year_elect_data=year_elect_data.drop(['ind','年'],axis=1) #删除两列,axis=0行操作
    del df_trn['收率']
    
    industry_data_new.drop(industry_data_new.columns[1:3], axis=1, inplace=True) #删除某几列数据
    
    df2=df2.drop(columns=['Chinese']编程客栈) #我们想把“语文”这列删掉
    df2=df2.drop(index=["ZhangFei'']) #想把“张飞”这行删掉。
    
    result_vin=result_df.drop_duplicates(subset='vin',keep='first')  #删除vin重复数据,保留第一个出现的
    
    '''删除EC60'''
    result_dfa=result_dfa[~result_dfa['vehicles'].isin(['EC60'])]
    result_dfa

    2、 查找某列特征数据(字符型)

    obj_columns=df.select_dtypes(['object'])
    col=obj_columns.columns
    df.drop(columns=col,inplace=True) #删除字符串数据

    筛选某列数据不为空的数据集:notnull()

    ind=df[df.data.notnull()]  
    ind=df[df['data'].notnull()]
    
    '''删除EC60'''
    result_dfa=result_dfa[~result_dfa['vehicles'].isin(['EC60'])]
    result_dfa

    3、列重命名

    Year_Elect=Year_elect.rename(columns={"index":"指标名称"})
    Year_elect=Year_elect.rename(columns={_col: _col + '_t' for _col in cols_timer},inplace=True)
    # 批量更改列名
    df.rename(columns=lambda x: x + '_1')

    4、包含某个特殊字符的列:contains()

    Industry_Data.columns.str.contains('_x')
    #提取含有字符串'hello'的行
    #方法一:
    df[df['ass']=='hello']
    #方法二:
    re=df['ass'].str.contains('hello')
    df[re]

    5、筛选需要的行业数据:存在isin()/不存在

    ind_data=ind[ind.行业名称.isin(industry_division.指标名称)] #industry_division.指标名称--industry_division对应指标名称列下的行业
    Spring_Autumn_weekend=Spring_Autumn_weekend[~Spring_Autumn_weekend.isin(Statutory_holidays)]  #删除法定节假日
    #取出满足条件的数据
    result_vin_mobile=result_vin[result_vin['mobile'].str.len()==11]#手机号长度为11位 

    6、根据某几列数据排序sort_values()

    dff=One_Weather_hfHgbdata.sort_values(['最高温度','行业'],inplace=True)

    7、统计gram列每种语言出现的次数

    df['gram'].value_counts()

    8、将空值用上下值的平均值进行填充

    df['score']=df['score'].fillna(df['score'].interpolate())

    9、交换两列的位置

    #方式一:
    temp=df['gram']
    df.drop(labels=['gram'],axis=1,inplace=True)
    df.insert(0,'gram',temp)
    #方式二:
    cols=df.columns[[1,0]]
    df=df[cols]

    10、新增一列根据salary将数据分为三组

    bins=[0,5000,20000,50000]
    group_name=['低','中','高']
    df['categrories']=pd.cut(df['salary'],bins,labels=group_name)

    11、将两列合成一列

    df['test']=df['edf']+df['crt']  #两列都是字符型
    df['test1']=df['salary'].map(str)+df['crt'] #salary 为int类型

    12、拆分某列,生成新的Dataframe

    df1 = df['行业'].str.split('-',expand=True)
    df1.columns = ['编号','行业']

    13、多列减去一列

    Spring_Air=Spring_Air_Elec-Spring_Air_Reference_Elec.values[:, None] #

    四、数据框

    1、对数据框按照分组进行标准化

    df['data_standardized'] = df.groupby('group')['data'].transform(lambda x: (x - np.mean(x)) / np.std(x))
    ##对数据框按照分组,取该组最后一个值
    df['data_last'] = df.groupby('group')['data'].transform('last')
    #对数据框按照分组,对空值进行平均值填充
    df['data_filled'] = df.groupby('group')['data'].transjavascriptform(lambda x: x.fillna(x.mean()))

    2、数据透视表

    #单索引
    df_pivot = pd.pivot_table(df,values ='商业销量', index = ['年月'], aggfunc=np.sum, fill_value=0) #当我们未设置aggfunc时,它默认aggfunc='mean'计算均值。fill_value,用0填充空值
    #多索引
    df_pivot = pd.pivot_table(df,values ='商业销量', index = ['品牌','经销商','年月'], columns=['系列'],aggfunc=np.sum, fill_value=0)#aggfunc可以多参数,如aggfunc=[np.mean,len,np.sum]),aggfunc={'数量':len,'价格':np.sum}
    #数据透视表过滤
    df_pivot = pd.pivot_table(df,values ='商业销量', index = ['品牌','经销商', '年月'], columns=['系列'],aggfunc=np.sum, fill_value=0)
    df=df_pivot.reset_index()  #重置索引
    
    df_pivot.query("品牌==['奔驰','宝马']")
    #get_level_values来获得不同级别索引
    df_pivot.index.get_level_values(0).unique()  #各品牌数据
    df_pivot.index.get_level_values(1).unique()  #各经销商数据
    df_pivot.xs(('奔驰','宝马'),level=0)  #数据转存excel

    3、统计指标0和空值数据

    null_per=100*(df.isnull()).sum(axis=0)/len(df)
    zero_per=100*(df==0).sum(axis=0)/len(df)
    new=null_per+zero_per

    4、检查数据中是否含有任何缺失值

    df.isnull().values.any()

    5、数据向前/后移动5天

    data.shift(-5)
    data.shift(5)

    6、按周采样,取一周最大值

    data['收盘价'].resample('W').max()

    7、计算前一天与后一天变化率

    data['收盘价'].pct_change()

    8、将小数转化为百分数

    df.style.format({'data':'{0:.2%}'.format})

    9、列表生成式:新增数据列

    Season_Weekday['Time_label']=[str(i) +'_'+ 'weekday' for i in pd.to_datetime(Season_Weekday.index).month]
    #从一个列表中
    [ i for i in range(9) if i %2 == 0]
    #从两个列表中进行推导
    [(i,j) for i in range(5) for j in range(5)]

    10、新建excel写入数据

    write=pd.ExcelWriter(r'各行业重点企业清单\\%s.xlsx'%(hy[0]))
    jl.to_excel(write,sheet_name='xx')
    write.save()

    五、时间数据

    1、时间范围区间选择:date_range

    from pandas import date_range
    Start=pd.to_datetime('%s-04-15'%Year)
    End=pd.to_datetime('%s-05-15'%Year)
    Tyday=pd.date_range(start=Start,end=End)

    2、将time列时间转换为月-日(月、年月日)

    for i in range(len(df)):
    	df.iloc[i,0]=df.iloc[i,0].to_pydatetime().strftime("%m-%d")
    Weather['Year_Month']=Weather['Date'].map(lambda x: x.to_pydatetime().strftime("%Y-%m"))
    Industry_Factor_Data["Date"]=pd.to_datetime(Industry_Factor_Data["Date"], format='%Y%m')
    df['order_date'] = pd.to_datetime(df.order_dt,format="%Y%m%d")
    df['month'] = df.order_date.values.astype('datetime64[M]')

    忽略警告

    import warnings
    warnings.filterwarnings("ignore")

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消