• pandas 稍复杂冷门操作实现记录 【重要】


    1、按某一列分组,按时间顺序排列,然后对另外一列进行滚动求和。

    c=a.copy()
    c.sort_values(by=["name","date"],ascending=True)  #按时间顺序
    c['cnt'] =c['cnt'].fillna(0)
    c['cnt']=c['cnt'].replace(['\\N'],[0])  #空值处理,求和要求数值型
    c['cnt'] =c['cnt'].astype('float')
    c['sum1'] = c.groupby(['name'])['cnt'].cumsum()  #按行累计求和
    

     另一种方法,使用rolling_sum方法,但是怎么分组和按时间排序还没想好。

    2、按pn_md5分组,求每个时间点之前的取值个数。

    采用分组按时间排序并标上序号的方法

    a =  pd.read_csv('/Users/aaaa.csv',sep=',',dtype=str)
    b=a.copy()
    b.obs_date = pd.to_datetime(b.obs_date)
    b.obs_date=pd.to_datetime(b.date,unit='s')
    b['date'] = b['date'].apply(lambda x: x.value // 10**10 )  #时间转unix,rank方法只能对数值操作
    b['group_sort']=b['date'].groupby(b['pn_md5']).rank(ascending=1,method='dense')
    

      

    3、python读数据量太大,分块读取方法

    import os
    import pandas as pd
    import numpy as np
    from sqlalchemy import create_engine
    from sqlalchemy.types import NVARCHAR,INT,DECIMAL,FLOAT
    import re
    path = '/Users/admin/bb.csv'

    #5万行一个块,然后分块处理合并,一次处理部分列 reader = pd.read_table(path,sep=',', chunksize=50000,iterator=True,encoding="utf-8") pd_merge = pd.DataFrame() for chunk in reader: #分块循环读取和处理 print(chunk) chunk_tmp1 = chunk.iloc[:,0:30] pd_merge = pd.concat([pd_merge,chunk_tmp1],axis = 0)

      

  • 相关阅读:
    Promise
    ajax基础
    flex布局的盒子模型
    css3核心模块
    响应式开发
    HTML5标签及表单
    JS面向对象编程
    JS面向对象的编程
    ES5构造函数与ES6类
    类欧几里得算法
  • 原文地址:https://www.cnblogs.com/zhangbojiangfeng/p/16257996.html
Copyright © 2020-2023  润新知