zoukankan      html  css  js  c++  java
  • pandas day01

    pandas

    # 设置index 为日期
    df.set_index('ymd',inplace=True)
    # 查看index 
    df.index
    # 替换温度后面的℃
    df.loc[:,'温度列名'] = df['温度列名'].str.replace('℃','').astype('int32')
    # 查看列类型
    df.types
    

    使用loc 查询数据

    # 查询单个值
    df.loc['2018-01-03','温度']
    df.loc['2018-01-01',['最高温度','最低温度']]
    
    # 使用列表批量查询
    df.loc[['2018-01-03','2018-01-03'],'温度'] # series
    
    df.loc[['2018-01-03','2018-01-03'],['温度','最低温度']] # dataframe
    
    # 区间范围查询
    df.loc['2018-01-03':'2018-01-05','温度']
    
    df.loc['2018-01-03','温度':'风向']
    
    df.loc['2018-01-03':'2018-01-05','温度':'风向']
    
    # 条件表达式进行查询
    温度低于-10度的列表
    df.loc[df['最低温度']<-10,:]
    最高温度<30度, 最低>15度 ,晴天,天气为优
    df.loc[(df['最高']<=30) & (df['最低']>=15),:]
    
    # 调用函数查询
    df.loc[lambda df:(df['最高']<=30) & (df['最低']>=15),:]
    
    def query_data(df):
        return df.index.str.startwith('2018-09') & df['空气质量'] ==1
    df.loc[query_data,:]
    
    

    pandas 处理缺失值

    1. isnull , notnull: 检测是否为空值,可用于df和series
    2. dropna: 删除缺失值
        axis: 0行,1列,default0
        how: any 行列中包含任何的空值都删除,all所有值都为空才删除
        inplace: 为true修改档期df, false新的df
    3. fillna: 填充控制
        value: 单个值或字典{列名:值}
        method: ffill 使用前一个不为空的值填充,bfill使用后一个不为空的值进行填充
        axis: 0行填充,1 列填充
        
     # 所有不为空的数据
    df.loc[df['score'].notnull(),:]
    # 删除全空的列
    df.dropna(axis='columns',how='all',inplace=True)
    # 删除全为空的行
    df.dropna(axis='index',how='all',inplace=True)
    # 分数为空的,填充为0
    df.fillna({'score':0})
    df.loc[:,'score'] = df['score'].fillna(0)
    # 填充姓名 -- 前面的列填充
    df.loc[:,'name'] = df['name'].fillna(method='ffill')
    

    SettingWithCopyWaning 报警解决

    # 替换摄氏度
    df.loc[:,'温度'] = df['温度'].str.relplace('℃','').astype('int32')
    # 筛选三月数据 -- warning!!!!! 
    condition = df['ymd'].str.startwith('2018-03')
    df[condition]['温差'] = df['高温'] - df['低温']
    ## 原因
    df[condition]['温差']
    1. 筛选出 子df 
    2. 子df 相减
    df.get(condition).set('温差') 
    链式操作,get得到子df 可能是view, 也可能是copy 
    
    # !! 重要
    pandas df 的修改和写操作,只允许在源df上进行,一步到位
    
    # 解决
    1. get+set 两步,改成set 一步
    df.loc[condition,'温度'] =  df['高温'] - df['低温']
    
    2. copy 第一步结果
    new_df = df[condition].copy()
    new_df['温差'] = df['高温'] - df['低温']
    
    

    index 的用途

    1. 用index 查询数据
    df.set_index('userid',inplace=True,drop=False) # drop false 保留userid
    # 查询用户id=500
    df.loc[df['userid'==500]].head()
    df.loc[500].head()
    2. index 提高查询性能
    index如果唯一,哈希表优化, o(1)
    index不唯一, 二分法 O(logN)
    index 随机, 全表 O(N)
    3. index 自动对齐
    如果加减运算
    s1+s2 索引对自动对齐进行加减
    4. index 强大的数据结构支持
    CategoricaIIndex, 基于分类数据的index, 提升性能
    MultiIndex, 多维索引,用于groupby 多维聚合后结果
    DatetimeIndex, 时间类型索引,强大的日期时间方法支持
    

    其他

    df['amount'].value_counts()
    
    
    # 添加月份和年份
    df['date'] = pd.to_datetime(df['date'])
    df['year'] = df['date'].dt.year
    df['month'] = df['date'].dt.month
    
  • 相关阅读:
    [补]2019HDU杭电多校第一场A
    [补]2019nowcoder牛客第三场F(暂且)
    [补]2019nowcoder牛客第一场E、I
    [学]从零(多项式基础与FFT)开始BM学习笔记
    [补]2019nowcoder牛客第二场E、H(upd0730)
    从一个简单的例子对win 服务程序进行讲解
    HTTP协议学习记录及总结
    Windows身份验证与forms身份验证的结合
    关于Sql server 的 几道面试题
    PlaceHolder控件的使用
  • 原文地址:https://www.cnblogs.com/Afrafre/p/15685918.html
Copyright © 2011-2022 走看看