pandas 稍複雜冷門操作實現記錄 【重要】
阿新 • • 發佈:2022-05-11
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)