zoukankan      html  css  js  c++  java
  • pandas巩固

    导包
    import pandas as pd
    设置输出结果列对齐
    pd.set_option('display.unicode.ambiguous_as_wide',True)
    pd.set_option('display.unicode.east_asian_width',True)
    创建 从 0 开始的非负整数索引
    s1 = pd.Series(range(1,20,5))
    使用字典创建 Series 字典的键作为索引
    s2 = pd.Series({'语文':95,'数学':98,'Python':100,'物理':97,'化学':99})
    修改 Series 对象的值
    s1[3] = -17
    查看 s1 的绝对值
    abs(s1)
    将 s1 所有的值都加 5、使用加法时,对所有元素都进行
    s1 + 5
    在 s1 的索引下标前加入参数值
    s1.add_prefix(2)
    s2 数据的直方图
    s2.hist()
    每行索引后面加上 hany
    s2.add_suffix('hany')
    查看 s2 中最大值的索引
    s2.argmax()
    查看 s2 的值是否在指定区间内
    s2.between(90,100,inclusive = True)
    查看 s2 中 97 分以上的数据
    s2[s2 > 97]
    查看 s2 中大于中值的数据
    s2[s2 > s2.median()]
    s2 与数字之间的运算,开平方根 * 10 保留一位小数
    round((s2**0.5)*10,1)
    s2 的中值
    s2.median()
    s2 中最小的两个数
    s2.nsmallest(2)
    s2 中最大的两个数
    s2.nlargest(2)
    Series 对象之间的运算,对相同索引进行计算,不是相同索引的使用 NaN
    pd.Series(range(5)) + pd.Series(range(5,10))
    对 Series 对象使用匿名函数
    pd.Series(range(5)).pipe(lambda x,y,z :(x**y)%z,2,5)
    pd.Series(range(5)).pipe(lambda x:x+3)
    pd.Series(range(5)).pipe(lambda x:x+3).pipe(lambda x:x*3)
    对 Series 对象使用匿名函数
    pd.Series(range(5)).apply(lambda x:x+3)
    查看标准差
    pd.Series(range(0,5)).std()
    查看无偏方差
    pd.Series(range(0,5)).var()
    查看无偏标准差
    pd.Series(range(0,5)).sem()
    查看是否存在等价于 True 的值
    any(pd.Series([3,0,True]))
    查看是否所有的值都等价于 True
    all(pd.Series([3,0,True]))

    创建一个 DataFrame 对象
    dataframe = pd.DataFrame(np.random.randint(1,20,(5,3)),
                             index = range(5),
                             columns = ['A','B','C'])
    索引为时间序列
    dataframe2 = pd.DataFrame(np.random.randint(5,15,(9,3)),
                              index = pd.date_range(start = '202003211126',
                                                    end = '202003212000',
                                                    freq = 'H'),
                              columns = ['Pandas','爬虫','比赛'])
    使用字典进行创建
    dataframe3 = pd.DataFrame({'语文':[87,79,67,92],
                               '数学':[93,89,80,77],
                               '英语':[88,95,76,77]},
                              index = ['张三','李四','王五','赵六'])
    创建时自动扩充
    dataframe4 = pd.DataFrame({'A':range(5,10),'B':3})
    查看周几
    dff['日期'] = pd.to_datetime(data['日期']).dt.weekday_name
    按照周几进行分组,查看交易的平均值
    dff = dff.groupby('日期').mean().apply(round)
    dff.index.name = '周几'
    对姓名和日期进行分组,并进行求和
    dff = dataframe.groupby(by = ['姓名','日期'],as_index = False).sum()
    将 dff 的索引,列 设置成透视表形式
    dff = dff.pivot(index = '姓名',columns = '日期',values = '交易额')
    查看前一天的数据
    dff.iloc[:,:1]
    交易总额小于 4000 的人的前三天业绩
    dff[dff.sum(axis = 1) < 4000].iloc[:,:3]
    工资总额大于 2900 元的员工的姓名
    dff[dff.sum(axis = 1) > 2900].index.values
    显示前两天每一天的交易总额以及每个人的交易金额
    dataframe.pivot_table(values = '交易额',index = '姓名',
                          columns = '日期',aggfunc = 'sum',margins = True).iloc[:,:2]
    显示每个人在每个柜台的交易总额
    dff = dataframe.groupby(by = ['姓名','柜台'],as_index = False).sum()
    dff.pivot(index = '姓名',columns = '柜台',values = '交易额')
    查看每人每天的上班次数
    dataframe.pivot_table(values = '交易额',index = '姓名',columns = '日期',aggfunc = 'count',margins = True).iloc[:,:1]
    查看每个人每天购买的次数
    dataframe.pivot_table(values = '交易额',index = '姓名',columns = '日期',aggfunc = 'count',margins = True)
    每个人每天上过几次班
    pd.crosstab(dataframe.姓名,dataframe.日期,margins = True).iloc[:,:2]
    每个人每天去过几次柜台
    pd.crosstab(dataframe.姓名,dataframe.柜台)
    将每一个人在每一个柜台的交易总额显示出来
    pd.crosstab(dataframe.姓名,dataframe.柜台,dataframe.交易额,aggfunc='sum')
    每个人在每个柜台交易额的平均值,金额/天数
    pd.crosstab(dataframe.姓名,dataframe.柜台,dataframe.交易额,aggfunc = 'mean').apply(lambda  num:round(num,2) )
    对 5 的余数进行分组
    dataframe.groupby(by = lambda num:num % 5)['交易额'].sum()
    查看索引为 7 15 的交易额
    dataframe.groupby(by = {7:'索引为7的行',15:'索引为15的行'})['交易额'].sum()
    查看不同时段的交易总额
    dataframe.groupby(by = '时段')['交易额'].sum()
    各柜台的销售总额
    dataframe.groupby(by = '柜台')['交易额'].sum()
    查看每个人在每个时段购买的次数
    count = dataframe.groupby(by = '姓名')['时段'].count()
    每个人的交易额平均值并排序
    dataframe.groupby(by = '姓名')['交易额'].mean().round(2).sort_values()
    每个人的交易额,apply(int) 转换为整数
    dataframe.groupby(by = '姓名').sum()['交易额'].apply(int)
    每一个员工交易额的中值
    data = dataframe.groupby(by = '姓名').median()
    查看交易额对应的排名
    data['排名'] = data['交易额'].rank(ascending = False)
    data[['交易额','排名']]
    每个人不同时段的交易额
    dataframe.groupby(by = ['姓名','时段'])['交易额'].sum()
    设置各时段累计
    dataframe.groupby(by = ['姓名'])['时段','交易额'].aggregate({'交易额':np.sum,'时段':lambda x:'各时段累计'})
    对指定列进行聚合,查看最大,最小,和,平均值,中值
    dataframe.groupby(by = '姓名').agg(['max','min','sum','mean','median'])
    查看部分聚合后的结果
    dataframe.groupby(by = '姓名').agg(['max','min','sum','mean','median'])['交易额']
    查看交易额低于 2000 的三条数据
    dataframe[dataframe.交易额 < 2000][:3]
    查看上浮了 50% 之后依旧低于 1500 的交易额,查看 4 条数据
    dataframe.loc[dataframe.交易额 < 1500,'交易额'] = dataframe[dataframe.交易额 < 1500]['交易额'].map(lambda num:num*1.5)
    查看交易额大于 2500 的数据
    dataframe[dataframe.交易额 > 2500]
    查看交易额低于 900 或 高于 1800 的数据
    dataframe[(dataframe.交易额 < 900)|(dataframe.交易额 > 1800)]
    将所有低于 200 的交易额都替换成 200
    dataframe.loc[dataframe.交易额 < 200,'交易额'] = 200
    查看低于 1500 的交易额个数
    dataframe.loc[dataframe.交易额 < 1500,'交易额'].count()
    将大于 3000 元的都替换为 3000 元
    dataframe.loc[dataframe.交易额 > 3000,'交易额'] = 3000
    查看有多少行数据
    len(dataframe)
    丢弃缺失值之后的行数
    len(dataframe.dropna())
    包含缺失值的行
    dataframe[dataframe['交易额'].isnull()]
    使用固定值替换缺失值
    dff = copy.deepcopy(dataframe)
    dff.loc[dff.交易额.isnull(),'交易额'] = 999
    使用交易额的均值替换缺失值
    dff = copy.deepcopy(dataframe)
    for i in dff[dff.交易额.isnull()].index:
        dff.loc[i,'交易额'] = round(dff.loc[dff.姓名 == dff.loc[i,'姓名'],'交易额'].mean())
    使用整体均值的 80% 填充缺失值
    dataframe.fillna({'交易额':round(dataframe['交易额'].mean() * 0.8)},inplace = True)
    查看重复值
    dataframe[dataframe.duplicated()]
    丢弃重复行
    dataframe = dataframe.drop_duplicates()
    查看员工业绩波动情况(每一天和昨天的数据作比较)
    dff = dataframe.groupby(by = '日期').sum()['交易额'].diff()
    对数据使用 map 函数
    dff.map(lambda num:'%.2f'%(num))[:5]
    查看张三的波动情况
    dataframe[dataframe.姓名 == '张三'].groupby(by = '日期').sum()['交易额'].diff()
    修改异常值
    data.loc[data.交易额 > 3000,'交易额'] = 3000
    data.loc[data.交易额 < 200,'交易额'] = 200
    删除重复值
    data.drop_duplicates(inplace = True)
    填充缺失值
    data['交易额'].fillna(data['交易额'].mean(),inplace = True)
    使用交叉表得到每人在各柜台交易额的平均值
    data_group = pd.crosstab(data.姓名,data.柜台,data.交易额,aggfunc = 'mean').apply(round)
    绘制柱状图
    data_group.plot(kind = 'bar')
    使用 concat 连接两个相同结构的 DataFrame 对象
    df3 = pd.concat([df1,df2])
    合并,忽略原来的索引 ignore_index
    df4 = df3.append([df1,df2],ignore_index = True)
    按照列进行拆分
    df5 = df4.loc[:,['姓名','柜台','交易额']]
    按照工号进行合并,随机查看 3 条数据
    rows = np.random.randint(0,len(df5),3)
    pd.merge(df4,df5).iloc[rows,:]
    按照工号进行合并,指定其他同名列的后缀
    pd.merge(df1,df2,on = '工号',suffixes = ['_x','_y']).iloc[:,:]
    两个表都设置工号为索引 set_index
    df2.set_index('工号').join(df3.set_index('工号'),lsuffix = '_x',rsuffix = '_y').iloc[:]
    按照交易额和工号降序排序,查看五条数据
    dataframe.sort_values(by = ['交易额','工号'],ascending = False)[:5]
    按照交易额和工号升序排序,查看五条数据
    dataframe.sort_values(by = ['交易额','工号'])[:5]
    按照交易额降序和工号升序排序,查看五条数据
    dataframe.sort_values(by = ['交易额','工号'],ascending = [False,True])[:5]
    按工号升序排序
    dataframe.sort_values(by = ['工号'])[:5]
    按列名升序排序
    dataframe.sort_index(axis = 1)[:5]
    每隔五天--5D
    pd.date_range(start = '20200101',end = '20200131',freq = '5D')
    每隔一周--W
    pd.date_range(start = '20200301',end = '20200331',freq = 'W')
    间隔两天,五个数据
    pd.date_range(start = '20200301',periods = 5,freq = '2D')
    间隔三小时,八个数据
    pd.date_range(start = '20200301',periods = 8,freq = '3H')
    三点开始,十二个数据,间隔一分钟
    pd.date_range(start = '202003010300',periods = 12,freq = 'T')
    每个月的最后一天
    pd.date_range(start = '20190101',end = '20191231',freq = 'M')
    间隔一年,六个数据,年末最后一天
    pd.date_range(start = '20190101',periods = 6,freq = 'A')
    间隔一年,六个数据,年初最后一天
    pd.date_range(start = '20200101',periods = 6,freq = 'AS')
    使用 Series 对象包含时间序列对象,使用特定索引
    data = pd.Series(index = pd.date_range(start = '20200321',periods = 24,freq = 'H'),data = range(24))
    三分钟重采样,计算均值
    data.resample('3H').mean()
    五分钟重采样,求和
    data.resample('5H').sum()
    计算OHLC open,high,low,close
    data.resample('5H').ohlc()
    将日期替换为第二天
    data.index = data.index + pd.Timedelta('1D')
    查看指定日期的年份是否是闰年
    pd.Timestamp('20200301').is_leap_year
    查看指定日期所在的季度和月份
    day = pd.Timestamp('20200321')
    查看日期的季度
    day.quarter
    查看日期所在的月份
    day.month
    转换为 python 的日期时间对象
    day.to_pydatetime()

    查看所有的交易额信息
    dataframe['交易额'].describe()
    查看四分位数
    dataframe['交易额'].quantile([0,0.25,0.5,0.75,1.0])
    查看最大的交易额数据
    dataframe.nlargest(2,'交易额')
    查看最后一个日期
    dataframe['日期'].max()
    查看最小的工号
    dataframe['工号'].min()
    第一个最小交易额的行下标
    index = dataframe['交易额'].idxmin()
    第一个最小交易额
    dataframe.loc[index,'交易额']
    最大交易额的行下标
    index = dataframe['交易额'].idxmax()
    跳过 1 2 4 行,以第一列姓名为索引
    dataframe2 = pd.read_excel('超市营业额.xlsx',
                               skiprows = [1,2,4],
                               index_col = 1)
    查看 5 到 10 的数据
    dataframe[5:11]
    查看第六行的数据
    dataframe.iloc[5]
    查看第 1 3 4 行的数据
    dataframe.iloc[[0,2,3],:]
    查看第 1 3 4 行的第 1 2 列
    dataframe.iloc[[0,2,3],[0,1]]
    查看前五行指定,姓名、时段和交易额的数据
    dataframe[['姓名','时段','交易额']][:5]
    查看第 2 4 5 行 姓名,交易额 数据 loc 函数
    dataframe.loc[[1,3,4],['姓名','交易额']]
    查看第四行的姓名数据
    dataframe.at[3,'姓名']
    某一时段的交易总和
    dataframe[dataframe['时段'] == '14:00-21:00']['交易额'].sum()
    查看张三总共的交易额
    dataframe[dataframe['姓名'].isin(['张三'])]['交易额'].sum()
    查看日用品的销售总额
    dataframe[dataframe['柜台'] == '日用品']['交易额'].sum()
    查看交易额在 1500~3000 之间的记录
    dataframe[dataframe['交易额'].between(1500,3000)]
    将日期设置为 python 中的日期类型
    data.日期 = pd.to_datetime(data.日期)
    每七天营业的总额
    data.resample('7D',on = '日期').sum()['交易额']
    每七天营业总额
    data.resample('7D',on = '日期',label = 'right').sum()['交易额']
    每七天营业额的平均值
    func = lambda item:round(np.sum(item)/len(item),2)
    data.resample('7D',on = '日期',label = 'right').apply(func)['交易额']
    每七天营业额的平均值
    func = lambda num:round(num,2)
    data.resample('7D',on = '日期',label = 'right').mean().apply(func)['交易额']
    删除工号这一列
    data.drop('工号',axis = 1,inplace = True)
    按照姓名和柜台进行分组汇总
    data = data.groupby(by = ['姓名','柜台']).sum()
    查看张三的汇总数据
    data.loc['张三',:]
    查看张三在蔬菜水果的交易数据
    data.loc['张三','蔬菜水果']
    丢弃工号列
    data.drop('工号',axis = 1,inplace = True)
    按照柜台进行排序
    dff = data.sort_index(level = '柜台',axis = 0)
    按照姓名进行排序
    dff = data.sort_index(level = '姓名',axis = 0)
    按照柜台进行分组求和
    dff = data.groupby(level = '柜台').sum()['交易额']
    平均值
    data.mean()
    标准差
    data.std()
    协方差
    data.cov()
    删除缺失值和重复值,inplace = True 直接丢弃
    data.dropna(inplace = True)
    data.drop_duplicates(inplace = True)

    2020-06-03

  • 相关阅读:
    python爬虫---selenium库的用法
    Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
    python字符串截取、查找、分割
    jupyter notebook快捷键使用指南
    python中防止字符串转义
    Python之print()函数
    使用腾讯电脑管家清理电脑后,上不了网了
    Python正则表达式指南
    python之format函数
    python安装media报错
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/13034160.html
Copyright © 2011-2022 走看看