pandas常用函數(shù)清單

1 import語句

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 
import datetime
import re

2 文件讀取

df = pd.read_csv(path='file.csv')
參數(shù):header=None  用默認列名,0,1,2,3...
     names=['A', 'B', 'C'...] 自定義列名
     index_col='A'|['A', 'B'...]  給索引列指定名稱,如果是多重索引,可以傳list
     skiprows=[0,1,2] 需要跳過的行號,從文件頭0開始,skip_footer從文件尾開始
     nrows=N 需要讀取的行數(shù),前N行
     chunksize=M 返回迭代類型TextFileReader,每M條迭代一次,數(shù)據(jù)占用較大內(nèi)存時使用
     sep=':'數(shù)據(jù)分隔默認是',',根據(jù)文件選擇合適的分隔符,如果不指定參數(shù),會自動解析
     skip_blank_lines=False 默認為True,跳過空行,如果選擇不跳過,會填充NaN
     converters={'col1', func} 對選定列使用函數(shù)func轉(zhuǎn)換,通常表示編號的列會使用(避免轉(zhuǎn)換成int)
     
dfjs = pd.read_json('file.json')  可以傳入json格式字符串
dfex = pd.read_excel('file.xls', sheetname=[0,1..]) 讀取多個sheet頁,返回多個df的字典
     

3 數(shù)據(jù)預(yù)處理

df.duplicated()           返回各行是否是上一行的重復行
df.drop_duplicates()      刪除重復行,如果需要按照列過濾,參數(shù)選填['col1', 'col2',...]
df.fillna(0)              用實數(shù)0填充na
df.dropna()               axis=0|1  0-index 1-column
                          how='all'|'any' all-全部是NA才刪  any-只要有NA就全刪
del df['col1']            直接刪除某一列              
df.drop(['col1',...], aixs=1)   刪除指定列,也可以刪除行                          
df.column = col_lst       重新制定列名
df.rename(index={'row1':'A'},   重命名索引名和列名
          columns={'col1':'A1'})  
df.replace(dict)          替換df值,前后值可以用字典表,{1:‘A’, '2':'B'}

def get_digits(str):
    m = re.match(r'(\d+(\.\d+)?)', str.decode('utf-8'))
    if m is not None:   
        return float(m.groups()[0])
    else:
        return 0
df.apply(get_digits)      DataFrame.apply,只獲取小數(shù)部分,可以選定某一列或行
df['col1'].map(func)      Series.map,只對列進行函數(shù)轉(zhuǎn)換

pd.merge(df1, df2, on='col1', 
         how='inner',sort=True) 合并兩個DataFrame,按照共有的某列做內(nèi)連接(交集),outter為外連接(并集),結(jié)果排序
         
pd.merge(df1, df2, left_on='col1', 
         right_on='col2')   df1 df2沒有公共列名,所以合并需指定兩邊的參考列


pd.concat([sr1, sr2, sr3,...], axis=0) 多個Series堆疊成多行,結(jié)果仍然是一個Series
pd.concat([sr1, sr2, sr3,...], axis=1) 多個Series組合成多行多列,結(jié)果是一個DataFrame,索引取并集,沒有交集的位置填入缺省值NaN
 
df1.combine_first(df2)   用df2的數(shù)據(jù)補充df1的缺省值NaN,如果df2有更多行,也一并補上

df.stack()              列旋轉(zhuǎn)成行,也就是列名變?yōu)樗饕饕兂啥鄬铀饕?,結(jié)果是具有多層索引的Series,實際上是把數(shù)據(jù)集拉長

df.unstack()            將含有多層索引的Series轉(zhuǎn)換為DataFrame,實際上是把數(shù)據(jù)集壓扁,如果某一列具有較少類別,那么把這些類別拉出來作為列
df.pivot()              實際上是unstack的應(yīng)用,把數(shù)據(jù)集壓扁

pd.get_dummies(df['col1'], prefix='key') 某列含有有限個值,且這些值一般是字符串,例如國家,借鑒位圖的思想,可以把k個國家這一列量化成k列,每列用0、1表示

                        

4 數(shù)據(jù)篩選

df.columns             列名,返回Index類型的列的集合
df.index               索引名,返回Index類型的索引的集合
df.shape               返回tuple,行x列
df.head(n=N)           返回前N條
df.tail(n=M)           返回后M條
df.values              值的二維數(shù)組,以numpy.ndarray對象返回
df.index               DataFrame的索引,索引不可以直接賦值修改
df.reindex(index=['row1', 'row2',...]
           columns=['col1', 'col2',...]) 根據(jù)新索引重新排序
df[m:n]                切片,選取m~n-1行
df[df['col1'] > 1]     選取滿足條件的行
df.query('col1 > 1')   選取滿足條件的行
df.query('col1==[v1,v2,...]') 
df.ix[:,'col1']        選取某一列
df.ix['row1', 'col2']  選取某一元素
df.ix[:,:'col2']       切片選取某一列之前(包括col2)的所有列
df.loc[m:n]            獲取從m~n行(推薦)
df.iloc[m:n]           獲取從m~n-1行
df.loc[m:n-1,'col1':'coln']   獲取從m~n行的col1~coln列


sr=df['col']           取某一列,返回Series
sr.values              Series的值,以numpy.ndarray對象返回
sr.index               Series的索引,以index對象返回



5 數(shù)據(jù)運算與排序


df.T                   DataFrame轉(zhuǎn)置
df1 + df2              按照索引和列相加,得到并集,NaN填充
df1.add(df2, fill_value=0) 用其他值填充
df1.add/sub//mul/div   四則運算的方法
df - sr                DataFrame的所有行同時減去Series
df * N                 所有元素乘以N
df.add(sr, axis=0)     DataFrame的所有列同時減去Series


sr.order()             Series升序排列
df.sort_index(aixs=0, ascending=True) 按行索引升序
df.sort_index(by=['col1', 'col2'...])  按指定列優(yōu)先排序
df.rank()              計算排名rank值

6 數(shù)學統(tǒng)計

sr.unique             Series去重
sr.value_counts()     Series統(tǒng)計頻率,并從大到小排序,DataFrame沒有這個方法
sr.describe()         返回基本統(tǒng)計量和分位數(shù)

df.describe()         按各列返回基本統(tǒng)計量和分位數(shù)
df.count()            求非NA值得數(shù)量
df.max()              求最大值
df.min()              求最大值
df.sum(axis=0)        按各列求和
df.mean()             按各列求平均值
df.median()           求中位數(shù)
df.var()              求方差
df.std()              求標準差
df.mad()              根據(jù)平均值計算平均絕對利差
df.cumsum()           求累計和
sr1.corr(sr2)         求相關(guān)系數(shù)
df.cov()              求協(xié)方差矩陣
df1.corrwith(df2)     求相關(guān)系數(shù)

pd.cut(array1, bins)  求一維數(shù)據(jù)的區(qū)間分布
pd.qcut(array1, 4)    按指定分位數(shù)進行區(qū)間劃分,4可以替換成自定義的分位數(shù)列表   

df['col1'].groupby(df['col2']) 列1按照列2分組,即列2作為key
df.groupby('col1')    DataFrame按照列1分組
grouped.aggreagte(func) 分組后根據(jù)傳入函數(shù)來聚合
grouped.aggregate([f1, f2,...]) 根據(jù)多個函數(shù)聚合,表現(xiàn)成多列,函數(shù)名為列名
grouped.aggregate([('f1_name', f1), ('f2_name', f2)]) 重命名聚合后的列名
grouped.aggregate({'col1':f1, 'col2':f2,...}) 對不同的列應(yīng)用不同函數(shù)的聚合,函數(shù)也可以是多個


df.pivot_table(['col1', 'col2'], 
               rows=['row1', 'row2'], 
               aggfunc=[np.mean, np.sum]
               fill_value=0,
               margins=True)  根據(jù)row1, row2對col1, col2做分組聚合,聚合方法可以指定多種,并用指定值替換缺省值
               
          
pd.crosstab(df['col1'], df['col2']) 交叉表,計算分組的頻率


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,839評論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,033評論 0 11
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,523評論 6 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 家樂_d356閱讀 307評論 0 0

友情鏈接更多精彩內(nèi)容