Python3 pandas用法大全


Python3 pandas用法大全

一、生成數據表 

1、首先導入pandas庫,一般都會用到numpy庫,所以我們先導入備用:

import numpy as np
import pandas as pd

2、導入CSV或者xlsx文件:

df = pd.DataFrame(pd.read_csv('name.csv',header=1))
df = pd.DataFrame(pd.read_excel('name.xlsx'))
#pandas還可以讀取一下文件: 
read_csv, 
read_excel, 
read_hdf, 
read_sql, 
read_json, 
read_msgpack (experimental), 
read_html, 
read_gbq (experimental), 
read_stata, 
read_sas, 
read_clipboard, 
read_pickle; 
#相應的寫入: 
to_csv, 
to_excel, 
to_hdf, 
to_sql, 
to_json, 
to_msgpack (experimental), 
to_html, 
to_gbq (experimental), 
to_stata, 
to_clipboard, 
to_pickle.

(1)pandas.read_csv()參數整理:

  讀取CSV(逗號分割)文件到DataFrame,也支持文件的部分導入和選擇迭代。
  filepath_or_buffer : str,pathlib。str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO)
  可以是URL,可用URL類型包括:http, ftp, s3和文件。
   sep : str, default ‘,’
  指定分隔符。如果不指定參數,則會嘗試使用逗號分隔。分隔符長於一個字符並且不是‘\s+’,將使用python的語法分析器。並且忽略數據中的逗號。正則表達式例子:'\r\t'
  delimiter : str, default None 
  定界符,備選分隔符(如果指定該參數,則sep參數失效)。
   delim_whitespace : boolean, default False. 
  指定空格(例如’ ‘或者’ ‘)是否作為分隔符使用,等效於設定sep='\s+'。如果這個參數設定為Ture那么delimiter 參數失效。在新版本0.18.1支持
   header : int or list of ints, default ‘infer’
  指定行數用來作為列名,數據開始行數。如果文件中沒有列名,則默認為0,否則設置為None。如果明確設定header=0 就會替換掉原來存在列名。header參數可以是一個list例如:[0,1,3],
  這個list表示將文件中的這些行作為列標題(意味着每一列有多個標題),介於中間的行將被忽略掉
  注意:如果skip_blank_lines=True 那么header參數忽略注釋行和空行,所以header=0表示第一行數據而不是文件的第一行。
   names : array-like, default None
  用於結果的列名列表,如果數據文件中沒有列標題行,就需要執行header=None。默認列表中不能出現重復,除非設定參數mangle_dupe_cols=True。
   index_col : int or sequence or False, default None
  用作行索引的列編號或者列名,如果給定一個序列則有多個行索引。
  如果文件不規則,行尾有分隔符,則可以設定index_col=False 來是的pandas不適用第一列作為行索引。
   usecols : array-like, default None
  返回一個數據子集,該列表中的值必須可以對應到文件中的位置(數字可以對應到指定的列)或者是字符傳為文件中的列名。
  例如:usecols有效參數可能是 [0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]。使用這個參數可以加快加載速度並降低內存消耗。
   as_recarray : boolean, default False
  不贊成使用:該參數會在未來版本移除。請使用pd.read_csv(...).to_records()替代。
  返回一個Numpy的recarray來替代DataFrame。如果該參數設定為True。將會優先squeeze參數使用。並且行索引將不再可用,索引列也將被忽略。
      squeeze : boolean, default False  
  如果文件值包含一列,則返回一個Series
    prefix : str, default None
  在沒有列標題時,給列添加前綴。例如:添加‘X’ 成為 X0, X1, ...
    mangle_dupe_cols : boolean, default True
  重復的列,將‘X’...’X’表示為‘X.0’...’X.N’。如果設定為false則會將所有重名列覆蓋。
    dtype : Type name or dict of column -> type, default None
  每列數據的數據類型。例如 {‘a’: np.float64, ‘b’: np.int32}
    engine : {‘c’, ‘python’}, optional
  Parser engine to use. The C engine is faster while the python engine is currently more feature-complete.
  使用的分析引擎。可以選擇C或者是python。C引擎快但是Python引擎功能更加完備。
    converters : dict, default None
  列轉換函數的字典。key可以是列名或者列的序號。
    true_values : list, default None
  Values to consider as True
    false_values : list, default None
  Values to consider as False
    skipinitialspace : boolean, default False
  忽略分隔符后的空白(默認為False,即不忽略).
    skiprows : list-like or integer, default None
  需要忽略的行數(從文件開始處算起),或需要跳過的行號列表(從0開始)。
    skipfooter : int, default 0
  從文件尾部開始忽略。 (c引擎不支持)
  skip_footer : int, default 0
  不推薦使用:建議使用skipfooter ,功能一樣。
    nrows : int, default None
  需要讀取的行數(從文件頭開始算起)。
    na_values : scalar, str, list-like, or dict, default None
  一組用於替換NA/NaN的值。如果傳參,需要制定特定列的空值。默認為‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.
    keep_default_na : bool, default True
  如果指定na_values參數,並且keep_default_na=False,那么默認的NaN將被覆蓋,否則添加。
    na_filter : boolean, default True
  是否檢查丟失值(空字符串或者是空值)。對於大文件來說數據集中沒有空值,設定na_filter=False可以提升讀取速度。
    verbose : boolean, default False
  是否打印各種解析器的輸出信息,例如:“非數值列中缺失值的數量”等。
    skip_blank_lines : boolean, default True
  如果為True,則跳過空行;否則記為NaN。
    parse_dates : boolean or list of ints or names or list of lists or dict, default False
    • boolean. True -> 解析索引
    • list of ints or names. e.g. If [1, 2, 3] -> 解析1,2,3列的值作為獨立的日期列;
    • list of lists. e.g. If [[1, 3]] -> 合並1,3列作為一個日期列使用
    • dict, e.g. {‘foo’ : [1, 3]} -> 將1,3列合並,並給合並后的列起名為"foo"
    infer_datetime_format : boolean, default False
  如果設定為True並且parse_dates 可用,那么pandas將嘗試轉換為日期類型,如果可以轉換,轉換方法並解析。在某些情況下會快5~10倍。
    keep_date_col : boolean, default False
  如果連接多列解析日期,則保持參與連接的列。默認為False。
    date_parser : function, default None
  用於解析日期的函數,默認使用dateutil.parser.parser來做轉換。Pandas嘗試使用三種不同的方式解析,如果遇到問題則使用下一種方式。
    1.使用一個或者多個arrays(由parse_dates指定)作為參數;
    2.連接指定多列字符串作為一個列作為參數;
    3.每行調用一次date_parser函數來解析一個或者多個字符串(由parse_dates指定)作為參數。
  dayfirst : boolean, default False
  DD/MM格式的日期類型
    iterator : boolean, default False
  返回一個TextFileReader 對象,以便逐塊處理文件。
    chunksize : int, default None
  文件塊的大小,  See IO Tools docs for more informationon iterator and chunksize.
  compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default ‘infer’
  直接使用磁盤上的壓縮文件。如果使用infer參數,則使用 gzip, bz2, zip或者解壓文件名中以‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’這些為后綴的文件,否則不解壓。
  如果使用zip,那么ZIP包中國必須只包含一個文件。設置為None則不解壓。
  新版本0.18.1版本支持zip和xz解壓
    thousands : str, default None
  千分位分割符,如“,”或者“."
    decimal : str, default ‘.’
  字符中的小數點 (例如:歐洲數據使用’,‘).
    float_precision : string, default None
  Specifies which converter the C engine should use for floating-point values. The options are None for the ordinary converter, high for the high-precision converter, and round_trip for the round-trip converter.
  lineterminator : str (length 1), default None
  行分割符,只在C解析器下使用。
    quotechar : str (length 1), optional
  引號,用作標識開始和解釋的字符,引號內的分割符將被忽略。
    quoting : int or csv.QUOTE_* instance, default 0
  控制csv中的引號常量。可選 QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3)
    doublequote : boolean, default True
  雙引號,當單引號已經被定義,並且quoting 參數不是QUOTE_NONE的時候,使用雙引號表示引號內的元素作為一個元素使用。
    escapechar : str (length 1), default None
  當quoting 為QUOTE_NONE時,指定一個字符使的不受分隔符限值。
    comment : str, default None
  標識着多余的行不被解析。如果該字符出現在行首,這一行將被全部忽略。這個參數只能是一個字符,空行(就像skip_blank_lines=True)注釋行被header和skiprows忽略一樣。
  例如如果指定comment='#' 解析‘#empty\na,b,c\n1,2,3’ 以header=0 那么返回結果將是以’a,b,c'作為header。
    encoding : str, default None
  指定字符集類型,通常指定為'utf-8'.  List of Python standard encodings
    dialect : str or csv.Dialect instance, default None
  如果沒有指定特定的語言,如果sep大於一個字符則忽略。具體查看csv.Dialect 文檔
    tupleize_cols : boolean, default False
  Leave a list of tuples on columns as is (default is to convert to a Multi Index on the columns)
    error_bad_lines : boolean, default True
  如果一行包含太多的列,那么默認不會返回DataFrame ,如果設置成false,那么會將改行剔除(只能在C解析器下使用)。
    warn_bad_lines : boolean, default True
  如果error_bad_lines =False,並且warn_bad_lines =True 那么所有的“bad lines”將會被輸出(只能在C解析器下使用)。
    low_memory : boolean, default True
  分塊加載到內存,再低內存消耗中解析。但是可能出現類型混淆。確保類型不被混淆需要設置為False。或者使用dtype 參數指定類型。
  注意使用chunksize 或者iterator 參數分塊讀入會將整個文件讀入到一個Dataframe,而忽略類型(只能在C解析器中有效)
    buffer_lines : int, default None
  不推薦使用,這個參數將會在未來版本移除,因為他的值在解析器中不推薦使用
    compact_ints : boolean, default False
  不推薦使用,這個參數將會在未來版本移除
  如果設置compact_ints=True ,那么任何有整數類型構成的列將被按照最小的整數類型存儲,是否有符號將取決於use_unsigned 參數
    use_unsigned : boolean, default False
  不推薦使用:這個參數將會在未來版本移除
  如果整數列被壓縮(i.e. compact_ints=True),指定被壓縮的列是有符號還是無符號的。
  memory_map : boolean, default False
  如果使用的文件在內存內,那么直接map文件使用。使用這種方式可以避免文件再次進行IO操作。

(2)pandas.read_csv()實例:

#read_csv會自動加上行索引,即使原數據集有行索引
obj=pd.read_csv('f:/ceshi.csv')
#獲取對應的列值,從列名獲取值,header必須從0開始或者默認
obj['列名']

#header=None時,即指明原始文件數據沒有列索引,這樣read_csv為自動加上列索引,除非你給定列索引的名字。
obj_2=pd.read_csv('f:/ceshi.csv',header=None,names=range(2,5))

#header=0,表示文件第0行(即第一行,python,索引從0開始)為列索引,這樣加names會替換原來的列索引。
obj_2=pd.read_csv('f:/ceshi.csv',index_col=0)

#index_col為指定數據中哪一列作為Dataframe的行索引,也可以可指定多列,形成層次索引,默認為None,即不指定行索引,這樣系統會自動加上行索引(0-)
obj_2=pd.read_csv('f:/ceshi.csv',index_col=[0,2])

#usecols:可以指定原數據集中,所使用的列。在本例中,共有4列,當usecols=[0,1,2,3]時,即選中所有列,之后令第一列為行索引,當usecols=[1,2,3]時,即從第二列開始,之后令原始數據集的第二列為行索引。
obj_2=pd.read_csv('f:/ceshi.csv',index_col=0,usecols=[0,1,2,3])

#nrows:可以給出從原始數據集中的所讀取的行數,目前只能從第一行開始到nrows行
obj_2=pd.read_csv('f:/ceshi.csv',index_col=0,nrows=3)

3、用pandas創建數據表:

df = pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006], 
  "date":pd.date_range('20130102', periods=6),
  "city":['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
  "age":[23,44,54,32,34,32],
  "category":['100-A','100-B','110-A','110-C','210-A','130-F'],
  "price":[1200,np.nan,2133,5433,np.nan,4432]},
  columns =['id','date','city','category','age','price'])

二、數據表信息查看 

1、維度查看:

df.shape

2、數據表基本信息(維度、列名稱、數據格式、所占空間等):

df.info()

3、每一列數據的格式:

df.dtypes

4、某一列格式:

df['B'].dtype

5、空值:

df.isnull()

6、查看某一列空值:

df['B'].isnull()

7、查看某一列的唯一值:

df['B'].unique()

8、查看數據表的值: 

df.values 

9、查看列名稱:

df.columns

10、查看前10行數據、后10行數據:

df.head() #默認前10行數據
df.tail()    #默認后10 行數據

三、數據表清洗 

 1、用數字0填充空值:

df.fillna(value=0)

2、使用列prince的均值對NA進行填充:

df['prince'].fillna(df['prince'].mean())

3、清楚city字段的字符空格:

df['city']=df['city'].map(str.strip)

4、大小寫轉換:

df['city']=df['city'].str.lower()

5、更改數據格式:

df['price'].astype('int')       

6、更改列名稱:

df.rename(columns={'category': 'category-size'}) 

7、刪除后出現的重復值:

df['city'].drop_duplicates()

8、刪除先出現的重復值:

df['city'].drop_duplicates(keep='last')

9、數據替換:

df['city'].replace('sh', 'shanghai')

四、數據預處理

df1=pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006,1007,1008], 
"gender":['male','female','male','female','male','female','male','female'],
"pay":['Y','N','Y','Y','N','Y','N','Y',],
"m-point":[10,12,20,40,40,40,30,20]})

1、數據表合並

df_inner=pd.merge(df,df1,how='inner')  # 匹配合並,交集
df_left=pd.merge(df,df1,how='left')        #
df_right=pd.merge(df,df1,how='right')
df_outer=pd.merge(df,df1,how='outer')  #並集

2、設置索引列

df_inner.set_index('id')

3、按照特定列的值排序:

df_inner.sort_values(by=['age'])

4、按照索引列排序:

df_inner.sort_index()

5、如果prince列的值>3000,group列顯示high,否則顯示low:

df_inner['group'] = np.where(df_inner['price'] > 3000,'high','low')

 6、對復合多個條件的數據進行分組標記

df_inner.loc[(df_inner['city'] == 'beijing') & (df_inner['price'] >= 4000), 'sign']=1

7、對category字段的值依次進行分列,並創建數據表,索引值為df_inner的索引列,列名稱為category和size

pd.DataFrame((x.split('-') for x in df_inner['category']),index=df_inner.index,columns=['category','size']))

8、將完成分裂后的數據表和原df_inner數據表進行匹配

df_inner=pd.merge(df_inner,split,right_index=True, left_index=True)

五、數據提取 

主要用到的三個函數:loc,iloc和ix,loc函數按標簽值進行提取,iloc按位置進行提取,ix可以同時按標簽和位置進行提取。 
1、按索引提取單行的數值

df_inner.loc[3]

2、按索引提取區域行數值

df_inner.iloc[0:5]

3、重設索引

df_inner.reset_index()

4、設置日期為索引

df_inner=df_inner.set_index('date')

5、提取4日之前的所有數據

df_inner[:'2013-01-04']

6、使用iloc按位置區域提取數據

df_inner.iloc[:3,:2] #冒號前后的數字不再是索引的標簽名稱,而是數據所在的位置,從0開始,前三行,前兩列。

7、適應iloc按位置單獨提起數據

df_inner.iloc[[0,2,5],[4,5]] #提取第0、2、5行,4、5列

8、使用ix按索引標簽和位置混合提取數據

df_inner.ix[:'2013-01-03',:4] #2013-01-03號之前,前四列數據

9、判斷city列的值是否為北京

df_inner['city'].isin(['beijing'])

10、判斷city列里是否包含beijing和shanghai,然后將符合條件的數據提取出來

df_inner.loc[df_inner['city'].isin(['beijing','shanghai'])] 

11、提取前三個字符,並生成數據表

pd.DataFrame(category.str[:3])

六、數據篩選 

使用與、或、非三個條件配合大於、小於、等於對數據進行篩選,並進行計數和求和。 
1、使用“與”進行篩選

df_inner.loc[(df_inner['age'] > 25) & (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']]

2、使用“或”進行篩選

df_inner.loc[(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['age']) 

3、使用“非”條件進行篩選

df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']) 

4、對篩選后的數據按city列進行計數

df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']).city.count()

5、使用query函數進行篩選

df_inner.query('city == ["beijing", "shanghai"]')

6、對篩選后的結果按prince進行求和

df_inner.query('city == ["beijing", "shanghai"]').price.sum()

七、數據匯總 主要函數是groupby和pivote_table 
1、對所有的列進行計數匯總

df_inner.groupby('city').count()

2、按城市對id字段進行計數

df_inner.groupby('city')['id'].count()

3、對兩個字段進行匯總計數

df_inner.groupby(['city','size'])['id'].count()

4、對city字段進行匯總,並分別計算prince的合計和均值

df_inner.groupby('city')['price'].agg([len,np.sum, np.mean]) 

八、數據統計

數據采樣,計算標准差,協方差和相關系數 
1、簡單的數據采樣

df_inner.sample(n=3) 

2、手動設置采樣權重

weights = [0, 0, 0, 0, 0.5, 0.5]
df_inner.sample(n=2, weights=weights) 

3、采樣后不放回

df_inner.sample(n=6, replace=False) 

4、采樣后放回

df_inner.sample(n=6, replace=True)

5、 數據表描述性統計

df_inner.describe().round(2).T #round函數設置顯示小數位,T表示轉置

6、計算列的標准差

df_inner['price'].std()

7、計算兩個字段間的協方差

df_inner['price'].cov(df_inner['m-point'])

8、數據表中所有字段間的協方差

df_inner.cov()

9、兩個字段的相關性分析

df_inner['price'].corr(df_inner['m-point']) #相關系數在-1到1之間,接近1為正相關,接近-1為負相關,0為不相關

10、數據表的相關性分析

df_inner.corr()

九、數據輸出 

分析后的數據可以輸出為xlsx格式和csv格式 
1、寫入Excel

df_inner.to_excel('excel_to_python.xlsx', sheet_name='bluewhale_cc') 

2、寫入到CSV

df_inner.to_csv('excel_to_python.csv') 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM