暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python模块分享

DATA ANALYSIS SHARING 2021-09-28
297

点击蓝字 关注我们



日期的递增操作

from datetime import date,timedelta

date获取日期(年月日)

timedelta时间差值

d = date(2020,11,11)# 自定义时间

# 三天之后

d + timedelta(days=3)


ctime = date.today() # 获取今天日期

ctime


# 日递增

current_time = date.today()

for i in df5.index:

    df5['Date'].at[i] = current_time + timedelta(days=i)


# 月递增

def add_month(d,md):  # 该函数可以反复使用

    '''自动帮你校验当前月份并自动重置'''

    yd = md//12

    m = d.month + md%12

    if m!= 12:

        yd += m 12

        m = m % 12

    return date(d.year+yd,m,d.day)

for i in df5.index:

    df5['Date'].at[i] = add_month(current_time,i)


# 年递增

for i in df5.index:

    df5['Date'].at[i] = date(current_time.year+i,current_time.month,current_time.day)

由于NaN为浮点型,可以在读取数据时,先将NaN转换成str

dtype={'ID':str,'isRun':str,'Date':str}

数据筛选

# 获取指定列的数据

# 1.获取汽车品牌和新车价格select Brand,New_price from sec_car;

# 单列

df4['Brand']

df4['列名']

# 多列 需要嵌套

df4[['Brand','New_price']]

df4[['列名1','列名2']]


# 获取指定数据

# 2.获取Discharge为国四的汽车数据select * from sec_car where Discharge = '国4';

df4[df4['Discharge']=='国4']


# 获取满足多个条件的数据

# 3.获取品牌是DS并且Discharge为国5的汽车数据

select * from sec_car where Brand = 'DS' and Discharge = '国5';

df4[(df4['Brand']=='DS') & (df4['Discharge'] == '国5')]


# 获取满足某个条件的数据

# 4.获取品牌是众泰或者二手车价格在15万以上的车

select * from sec_car where Brand ='众泰' or Sec_price >15;

df4[(df4['Brand'] == '众泰') | (df4['Sec_price'] > 15)]


# 获取满足部分条件的部分数据

# 5.获取品牌是众泰或者二手车价格在15万以上的车的Name和New_price

select Name,New_price from sec_car where Brand ='众泰' or Sec_price >15;

df4.loc[(df4['Brand'] == '众泰') | (df4['Sec_price'] > 15),['Name','New_price']]

'''如果针对筛选出来的数据 还需要指定字段名称 则需要使用loc方法'''

数据处理

# 1.将Boarding_time由原来的字符串类型转换成日期类型

pd.to_datetime(df4['Boarding_time'],format='%Y年%m月')

"""

日期习惯的符号

Y年

m月

d日

H时

M分

S秒

"""

df4['Boarding_time'] =

pd.to_datetime(df4['Boarding_time'],format='%Y年%m月')


# 2.将New_price由原来的字符串转换成数字类型

df4['New_price'].str[0:-1]  # 获取除最后一个字符,切割字符串数据 需要加str方法

df4['New_price'].str[0:-1].astype(float)  

# astype用于数据类型的转换

# dtypes和info()查看数据类型


# 3.去重select distinct id from user;

df5.duplicated()# 判断是否含有重复数据

df5[df5.duplicated()]# 获取重复数据

df5.drop_duplicates()# 直接删除重复的数据

缺失值处理

缺失值的识别与处理

1.df.isnull

    2.df.fillna

    3.df.dropna


data05 = pd.read_excel(r'data_test05.xlsx')

data05.head()

data05.isnull() # 统计每个数据项是否有缺失

data05.isnull().any(axis = 0) # 统计列字段下是否含有缺失


data05.isnull().sum(axis = 0) # 计算缺失值的数量

# 计算各列数据的缺失比例

data05.isnull().sum(axis = 0)/data05.shape[0]

data05.dropna()


data05.fillna(value=0) # 将所有的缺失值填充为0(不合理)

# 针对不同的缺失值使用合理的填充手段

data05.fillna(value = {

  'gender':data05.gender.mode()[0],  # 众数:可以有一个也可能是多个

  'age':data05.age.mean(),  # 平均值

  'income':data05.income.median()  # 中位数

}, inplace = True)


· 数据汇总 ·

# 透视表功能

pd.pivot_table(data, values=None, index=None, columns=None,

              aggfunc = 'mean',fill_value = None,margins= False,

              dropna = True,margins_name = 'All')


data:指定需要构造透视表的数据集 

values:指定需要拉入“数值”框的字段列表

index:指定需要拉入“行标签”框的字段列表 

columns:指定需要拉入“列标签”框的字段列表 

aggfunc:指定数值的统计函数,默认为统计均值,也可以指定numpy模块中的其他统计函数 

fill_value:指定一个标量,用于填充缺失值 

margins:bool类型参数,是否需要显示行或列的总计值,默认为False 

dropna:bool类型参数,是否需要删除整列为缺失的字段,默认为True 

margins_name:指定行或列的总计名称,默认为All


data06 = pd.read_csv(r'diamonds.csv')

data06.head()


pd.pivot_table(data06, index = 'color',values='price',aggfunc='mean')

pd.pivot_table(data06, index = 'color', columns='clarity',values='price',

              aggfunc = 'size')

分组与聚合

import numpy as np

# MySQL  group by  abs按照指定的条件将单个单个的数据分门别类

# 聚合函数   max min avg sum count     分组之后才可以使用聚合函数

df1.groupby(by='color').size()

# 通过groupby方法,指定分组分量

grouped = df1.groupby(by = ['color','cut'])

# 对分组变量进行统计汇总

res = df1.groupby(by='color').aggregate({

    'color':np.size, 

    'carat':np.min, 

    'price':np.mean, 

    'table':np.max

})


# 调整变量名的顺序

result = pd.DataFrame(result, columns=['color','carat','price','table'])


# 数据集重命名

result.rename(columns={'color':'count',

                      'carat':'min_weight',

                      'price':'avg_price',

                      'table':'max_table'},

             inplace=True)

作业讲解

1.利用read_excel完成

df5 = pd.read_excel(r'data_test06.xlsx',

                    skiprows=5,

                    usecols=['ID','Name','isRun','Date']

                   )

df5

    # 需求分析

    df5.describe()快速统计


    # 针对ID自动递增填充

    df5['ID']

    len(df5['ID'])

    # 方式1

    id_list = []

    for i in range(len(df5['ID'])):

        id_list.append(i+1)

    df5['ID'] = id_list

    # 方式2

    "列表生成式"

    df5['ID'] = [i+1 for i in range(len(df5['ID']))]

    # 方式3

    for i in df5.index:

        df5['ID'].at[i] = i + 1 # at[行索引]获取id字段对应数据


    # 针对isRun自动交替变换

    for i in df5.index:

        if i%2 == 0:

            df5['isRun'].at[i] = 'Yes'

        else:

        df5['isRun'].at[i] = 'No'


    # 利用二元表达式的优化

     for i in df5.index:

        df5['isRun'].at[i] = 'Yes' if i%2 == 0 else 'No'



文章转载自DATA ANALYSIS SHARING,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论