1. 程式人生 > 其它 >pandas 稍複雜冷門操作實現記錄 【重要】

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)