Python 資料處理庫 pandas
核心資料結構
pandas最核心的就是Series
和DataFrame
兩個資料結構。
名稱 | 維度 | 說明 |
---|---|---|
Series | 1維 | 帶有標籤的同構型別陣列 |
DataFrame | 2維 | 表格結構,帶有標籤,大小可變,且可以包含異構的資料列 |
DataFrame可以看做是Series的容器,即:一個DataFrame中可以包含若干個Series。
series
由於Series是一堆結構的資料,我們可以直接通過陣列來建立這種資料,像這樣:
import pandas as pd import numpy as np series1 = pd.Series([1, 2, 3, 4])print("series1:\n{}\n".format(series1)) # series1: # 0 1 # 1 2 # 2 3 # 3 4 # dtype: int64
- 輸出的最後一行是Series中資料的型別,這裡的資料都是int64型別的。
- 資料在第二列輸出,第一列是資料的索引
我們分別打印出Series中的資料和索引
print("series1.values: {}\n".format(series1.values)) print("series1.index: {}\n".format(series1.index))# series1.values: [1 2 3 4] # series1.index: RangeIndex(start=0, stop=4, step=1)
我們可以指定索引的型別,例如字串
series2 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=["C", "D", "E", "F", "G", "A", "B"]) print("series2:\n{}\n".format(series2)) print("E is {}\n".format(series2["E"])) # series2: # C 1 # D 2# E 3 # F 4 # G 5 # A 6 # B 7 # dtype: int64 # E is 3
DataFrame
通過Numpy介面來建立一個4x4的矩陣,以此來建立DataFrame
1 import pandas as pd 2 import numpy as np 3 4 df1 = pd.DataFrame(np.arange(16).reshape(4,4)) 5 print("df1:\n{}\n".format(df1)) 6 7 # df1: 8 # 0 1 2 3 9 # 0 0 1 2 3 10 # 1 4 5 6 7 11 # 2 8 9 10 11 12 # 3 12 13 14 15View Code
預設的索引和列名都是[0,N-1]的形式,同樣我們可以指定列名和索引,
1 import pandas as pd 2 import numpy as np 3 4 df2 = pd.DataFrame(np.arange(16).reshape(4,4), 5 columns=["column1", "column2", "column3", "column4"], 6 index=["a", "b", "c", "d"]) 7 print("df2:\n{}\n".format(df2)) 8 9 # df2: 10 # column1 column2 column3 column4 11 # a 0 1 2 3 12 # b 4 5 6 7 13 # c 8 9 10 11 14 # d 12 13 14 15View Code
我們也可以指定結構來建立DataFrame
1 import pandas as pd 2 import numpy as np 3 4 df3 = pd.DataFrame({"note" : ["C", "D", "E", "F", "G", "A", "B"], 5 "weekday": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]}) 6 print("df3:\n{}\n".format(df3)) 7 8 # df3: 9 # note weekday 10 # 0 C Mon 11 # 1 D Tue 12 # 2 E Wed 13 # 3 F Thu 14 # 4 G Fri 15 # 5 A Sat 16 # 6 B SunView Code
注意:
-
DataFrame的不同列可以是不同的資料型別
-
如果以Series陣列來建立DataFrame,每個Series將成為一行,而不是一列
1 import pandas as pd 2 import numpy as np 3 4 noteSeries = pd.Series(["C", "D", "E", "F", "G", "A", "B"], 5 index=[1, 2, 3, 4, 5, 6, 7]) 6 weekdaySeries = pd.Series(["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], 7 index=[1, 2, 3, 4, 5, 6, 7]) 8 df4 = pd.DataFrame([noteSeries, weekdaySeries]) 9 print("df4:\n{}\n".format(df4)) 10 11 # df4: 12 # 1 2 3 4 5 6 7 13 # 0 C D E F G A B 14 # 1 Mon Tue Wed Thu Fri Sat SunView Code
我們還可以“新增”或“刪除”列資料
1 import pandas as pd 2 import numpy as np 3 4 df3 = pd.DataFrame({"note" : ["C", "D", "E", "F", "G", "A", "B"], 5 "weekday": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]}) 6 df3["No."] = pd.Series([1, 2, 3, 4, 5, 6, 7]) 7 print("df3:\n{}\n".format(df3)) 8 9 del df3["weekday"] 10 print("df3:\n{}\n".format(df3)) 11 12 # df3: 13 # note weekday No. 14 # 0 C Mon 1 15 # 1 D Tue 2 16 # 2 E Wed 3 17 # 3 F Thu 4 18 # 4 G Fri 5 19 # 5 A Sat 6 20 # 6 B Sun 7 21 22 # df3: 23 # note No. 24 # 0 C 1 25 # 1 D 2 26 # 2 E 3 27 # 3 F 4 28 # 4 G 5 29 # 5 A 6 30 # 6 B 7View Code
index物件與資料訪問
同樣可以通過索引來獲取DataFrame的行和列
1 print("df3.columns\n{}\n".format(df3.columns)) 2 print("df3.index\n{}\n".format(df3.index)) 3 4 # df3.columns 5 # Index(['note', 'No.'], dtype='object') 6 7 # df3.index 8 # RangeIndex(start=0, stop=7, step=1)View Code
注意:
-
Index並非集合,因此其中可以包含重複的資料
-
Index物件的值是不可以改變,因此可以通過它安全的訪問資料
DataFrane提供了下面兩個操作符來訪問其中的資料
-
loc
:通過行和列的索引來訪問資料 -
iloc
:通過行和列的下標來訪問資料
1 print("Note C, D is:\n{}\n".format(df3.loc[[0, 1], "note"])) 2 print("Note C, D is:\n{}\n".format(df3.iloc[[0, 1], 0])) 3 4 # Note C, D is: 5 # 0 C 6 # 1 D 7 # Name: note, dtype: object 8 9 # Note C, D is: 10 # 0 C 11 # 1 D 12 # Name: note, dtype: objectView Code
第一行程式碼訪問了行索引為0和1,列索引為“note”的元素,第二行程式碼訪問了行下標為0和1對於df3來說,行索引和行下標剛好是一樣的,所以這裡都是0和1,但它們卻是不同的含義),列下標為0的元素。
檔案操作
讀取Excel檔案
注:要讀取Excel檔案,還需要安裝另外一個庫;xlrd
pip install xlrd
1 import pandas as pd 2 import numpy as np 3 4 df1 = pd.read_excel("data/test.xlsx") 5 print("df1:\n{}\n".format(df1)) 6 7 # df1: 8 # C Mon 9 # 0 D Tue 10 # 1 E Wed 11 # 2 F Thu 12 # 3 G Fri 13 # 4 A Sat 14 # 5 B SunView Code
讀取csv檔案
1 C,Mon 2 D,Tue 3 E,Wed 4 F,Thu 5 G,Fri 6 A,Sat第一個CSV檔案內容
1 C|Mon 2 D|Tue 3 E|Wed 4 F|Thu 5 G|Fri 6 A|Sat第二個CSV檔案的內容
讀取CSV檔案
1 import pandas as pd 2 import numpy as np 3 df2 = pd.read_csv("data/test1.csv") 4 print("df2:\n{}\n".format(df2)) 5 # df3 = pd.read_csv("data/test2.csv", sep="|") 6 # print("df3:\n{}\n".format(df3))View Code
我們可以發現,第二個CSV檔案並不是通過逗號分隔的,我們通常指定分隔符的方式來讀取這個檔案。
read_csv
支援非常多的引數用來調整讀取的引數
引數 | 說明 |
---|---|
path | 檔案路徑 |
sep或者delimiter | 欄位分隔符 |
header | 列名的行數,預設是0(第一行) |
index_col | 列號或名稱用作結果中的行索引 |
names | 結果的列名稱列表 |
skiprows | 從起始位置跳過的行數 |
na_values | 代替NA 的值序列 |
comment | 以行結尾分隔註釋的字元 |
parse_dates | 嘗試將資料解析為datetime 。預設為False |
keep_date_col | 如果將列連線到解析日期,保留連線的列。預設為False 。 |
converters | 列的轉換器 |
dayfirst | 當解析可以造成歧義的日期時,以內部形式儲存。預設為False |
data_parser | 用來解析日期的函式 |
nrows | 從檔案開始讀取的行數 |
iterator | 返回一個TextParser物件,用於讀取部分內容 |
chunksize | 指定讀取塊的大小 |
skip_footer | 檔案末尾需要忽略的行數 |
verbose | 輸出各種解析輸出的資訊 |
encoding | 檔案編碼 |
squeeze | 如果解析的資料只包含一列,則返回一個Series |
thousands | 千數量的分隔符 |
處理無效值
主要有兩種處理方法:直接忽略這些無效值;或者將無效值替換成有效值。
我們先建立一個包含無效值的資料結構。然後通過pandas.isna
函式來確認哪些值是無效的:
1 import pandas as pd 2 import numpy as np 3 4 df = pd.DataFrame([[1.0, np.nan, 3.0, 4.0], 5 [5.0, np.nan, np.nan, 8.0], 6 [9.0, np.nan, np.nan, 12.0], 7 [13.0, np.nan, 15.0, 16.0]]) 8 9 print("df:\n{}\n".format(df)); 10 print("df:\n{}\n".format(pd.isna(df))) 11 12 # df: 13 # 0 1 2 3 14 # 0 1.0 NaN 3.0 4.0 15 # 1 5.0 NaN NaN 8.0 16 # 2 9.0 NaN NaN 12.0 17 # 3 13.0 NaN 15.0 16.0 18 19 # df: 20 # 0 1 2 3 21 # 0 False True False False 22 # 1 False True True False 23 # 2 False True True False 24 # 3 False True False FalseView Code
忽略無效值
我們可以通過pandas.DataFrame.dropna
函式拋棄無效值
1 import pandas as pd 2 import numpy as np 3 4 df = pd.DataFrame([[1.0, np.nan, 3.0, 4.0], 5 [5.0, np.nan, np.nan, 8.0], 6 [9.0, np.nan, np.nan, 12.0], 7 [13.0, np.nan, 15.0, 16.0]]) 8 9 print("df.dropna():\n{}\n".format(df.dropna())); 10 11 # df.dropna(): 12 # Empty DataFrame 13 # Columns: [0, 1, 2, 3] 14 # Index: []View Code
對於原先的結構,當無效值全部被拋棄之後,將不再是一個有效的DataFrame,所以才會是以上結果
我們也可以選擇拋棄整列都是無效值的那一列:
1 import pandas as pd 2 import numpy as np 3 4 df = pd.DataFrame([[1.0, np.nan, 3.0, 4.0], 5 [5.0, np.nan, np.nan, 8.0], 6 [9.0, np.nan, np.nan, 12.0], 7 [13.0, np.nan, 15.0, 16.0]]) 8 9 print("df.dropna(axis=1,how='all'):\n{}\n".format(df.dropna(axis=1, how='all'))); 10 11 # df.dropna(axis=1, how='all'): 12 # 0 2 3 13 # 0 1.0 3.0 4.0 14 # 1 5.0 NaN 8.0 15 # 2 9.0 NaN 12.0 16 # 3 13.0 15.0 16.0View Code
注:axis=1
表示列的軸。how可以取值’any’或者’all’,預設是前者。
替換無效值
我們也可以通過fillna
函式將無效值替換成為有效值
1 import pandas as pd 2 import numpy as np 3 4 df = pd.DataFrame([[1.0, np.nan, 3.0, 4.0], 5 [5.0, np.nan, np.nan, 8.0], 6 [9.0, np.nan, np.nan, 12.0], 7 [13.0, np.nan, 15.0, 16.0]]) 8 9 print("df:\n{}\n".format(df)); 10 11 print("df.fillna(1):\n{}\n".format(df.fillna(1))); 12 13 # df: 14 # 0 1 2 3 15 # 0 1.0 NaN 3.0 4.0 16 # 1 5.0 NaN NaN 8.0 17 # 2 9.0 NaN NaN 12.0 18 # 3 13.0 NaN 15.0 16.0 19 20 # df.fillna(1): 21 # 0 1 2 3 22 # 0 1.0 1.0 3.0 4.0 23 # 1 5.0 1.0 1.0 8.0 24 # 2 9.0 1.0 1.0 12.0 25 # 3 13.0 1.0 15.0 16.0View Code
將無效值全部替換成同樣的資料可能意義不大,因此我們可以指定不同的資料來進行填充。為了便於操作,在填充之前,我們可以先通過rename
方法修改行和列的名稱:
1 import pandas as pd 2 import numpy as np 3 4 df = pd.DataFrame([[1.0, np.nan, 3.0, 4.0], 5 [5.0, np.nan, np.nan, 8.0], 6 [9.0, np.nan, np.nan, 12.0], 7 [13.0, np.nan, 15.0, 16.0]]) 8 9 print("df:\n{}\n".format(df)); 10 print("df:\n{}\n".format(pd.isna(df))) 11 12 df.rename(index={0: 'index1', 1: 'index2', 2: 'index3', 3: 'index4'}, 13 columns={0: 'col1', 1: 'col2', 2: 'col3', 3: 'col4'}, 14 inplace=True); 15 df.fillna(value={'col2': 2}, inplace=True) # 把第2列的空值變成2 16 df.fillna(value={'col3': 7}, inplace=True) # 把第3列的空值變成7 17 print("df:\n{}\n".format(df)); 18 19 # df: 20 # 0 1 2 3 21 # 0 1.0 NaN 3.0 4.0 22 # 1 5.0 NaN NaN 8.0 23 # 2 9.0 NaN NaN 12.0 24 # 3 13.0 NaN 15.0 16.0 25 26 # df: 27 # 0 1 2 3 28 # 0 False True False False 29 # 1 False True True False 30 # 2 False True True False 31 # 3 False True False False 32 33 # df: 34 # col1 col2 col3 col4 35 # index1 1.0 2.0 3.0 4.0 36 # index2 5.0 2.0 7.0 8.0 37 # index3 9.0 2.0 7.0 12.0 38 # index4 13.0 2.0 15.0 16.0View Code
處理字串
Series
的str
欄位包含了一系列的函式用來處理字串。並且,這些函式會自動處理無效值。
1 import pandas as pd 2 3 s1 = pd.Series([' 1', '2 ', ' 3 ', '4', '5']); 4 print("s1.str.rstrip():\n{}\n".format(s1.str.lstrip())) 5 print("s1.str.strip():\n{}\n".format(s1.str.strip())) 6 print("s1.str.isdigit():\n{}\n".format(s1.str.isdigit())) 7 8 # s1.str.rstrip(): 9 # 0 1 10 #相關推薦
Python 資料處理庫 pandas 入門教程
Python 資料處理庫 pandas 入門教程2018/04/17 · 工具與框架 · Pandas, Python 原文出處: 強波的技術部落格 pandas是一個Python語言的軟體包,在我們使用Python語言進行機器學習程式設計的時候,這是一個非常常用的基礎程式設計庫。本文是對它的一個入門教程。p
Python資料處理庫pandas基本使用
---恢復內容開始--- pandas提供過便於操作資料的資料型別,也提供了許多分析函式和分析工具,使得資料分析易於操作。 一、pandas庫中Series型別 Series可以生成資料的索引(自動索引和自定義索引),見下例: Se
Python資料處理庫pandas入門教程
pandas是一個Python的yuyi語言軟體包,在我們使用Python語音進行機器學習程式設計的時候,這是一個非常常用的基礎程式設計庫。本文是對它的一個入門教程。 pandas提供了快速,靈活和富有表現力的資料結構,目的是使“關係”或“標記”資料的工作既簡
Python資料處理庫pandas進階教程
在前面一篇文章中,我們對pandas做了一些入門介紹。本文是它的進階篇。在這篇文章中,我們會講解一些更深入的知識。 前言 本文緊接著前一篇的入門教程,會介紹一些關於pandas的進階知識。建議讀者在閱讀本文之前先看完pandas入門教程。 資料訪問 在入門教程中,
Python 資料處理庫 pandas
核心資料結構 pandas最核心的就是Series和DataFrame兩個資料結構。 名稱維度說明 Series 1維 帶有標籤的同構型別陣列
python資料處理庫numpy、pandas陣列操作
1.numpy 1.1陣列行列 import numpy as np data_np=np.array(data) data_col=data_np[:,2:] data_row=data_np[] 1.2陣列拼接 按列拼接 data_cat_
【python資料處理】pandas多表操作
pandas多表操作 1.Inner Merge 合併dataframe pd.merge()將兩張dataframe合成一張 除了pandas的方法,each DataFrame都有自己的merge()方法 查詢 類似於SELECT WHERE res
【python資料處理】pandas行列操作及聚合
1.列操作 apply df.coulumn.function() (df.count.mean()這種) 例子: 將Name列全部大寫 from string import upper df['Name'] = df.Name.a
【python資料處理】pandas基礎操作
基礎操作 1.建立表 dataframe 類似於csv 與SQL表 方法1 import codecademylib import pandas as pd df1 = pd.DataFrame({ 'Product ID': [1, 2
Python資料處理(二) | Pandas資料處理
本篇部落格所有示例使用Jupyter NoteBook演示。 Python資料處理系列筆記基於:Python資料科學手冊電子版 下載密碼:ovnh 示例程式碼 下載密碼:02f4 目錄
Python資料分析庫pandas基本操作
pandas是什麼? 是它嗎? 。。。。很顯然pandas沒有這個傢伙那麼可愛。。。。 我們來看看pandas的官網是怎麼來定義自己的: pandas is an open source, easy-to-use data structures and data an
Python資料處理:Pandas模組的 12 種實用技巧
簡介 Python 正迅速成為資料科學家們更為鍾愛的程式語言。形成該現狀的理由非常充分:Python 提供了一種覆蓋範圍更為廣闊的程式語言生態系統,以及具有一定計算深度且效能良好的科學計算庫。如果您是 Python 初學者,建議首先看下Python 學習路線。 在 Python
python資料處理工具 pandas包常用方法總結(持續更新)
======================== INTRODUCTION TO PANDAS ======================== 圓括號是函式,方括號是索引 #Series data can be numpy array,or a python dict
python 資料處理學習pandas之DataFrame(三)
請原諒沒有一次寫完,本文是自己學習過程中的記錄,完善pandas的學習知識,對於現有網上資料的缺少和利用python進行資料分析這本書部分知識的過時,只好以記錄的形勢來寫這篇文章.最如果後續工作定下來有時間一定完善pandas庫的學習,請見諒!
python資料分析處理庫-Pandas資料讀取、索引與計算
Pandas資料讀取、索引與計算 Pandas資料結構為DataFrame,裡面可以同時是int、float、object(string型別時)、datatime、bool資料型別 import p
python資料分析處理庫-Pandas之Series結構及Series常用操作方法
我上上篇部落格說過:Pandas資料結構為DataFrame,裡面可以同時是int、float、object(string型別時)、datatime、bool資料型別。而構成DataFrame結構的每一
python常用資料處理庫的安裝(numpy pandas matplotlib)
這篇文章記錄的不錯,轉載一把https://www.cnblogs.com/lxmhhy/p/6029465.htmlpip install matplotlib -i http://pypi.douban.com/simple --trusted-host pypi.dou
【A-003】python資料分析與機器學習實戰 Python科學計算庫 Pandas資料分析處理庫(四)DataFrame資料結構
pandas資料結構:DataFrame 引入: 在上一節中已經介紹過了Series物件,Series物件可以理解為由一列索引和一列值,共兩列資料組成的結構。而DataFrame就是由一列索引和多列值組成的結構,其中,在DataFrame中的每一列都是一個S
Python大資料處理庫PySpark實戰
https://cloud.tencent.com/developer/article/1096712 Spark的安裝和使用(Python版) http://dblab.xmu.edu.cn/blog/1689-2/ https://blog.csdn.net/qq_14959801/
Python資料處理之(一)為什麼要學習 Numpy & Pandas?
今天我們介紹兩個科學運算當中最為重要的兩個模組,一個是numpy,一個是 pandas。任何關於資料分析的模組都少不了它們兩個。 一、主要用途: 資料分析 機器學習 深度學習 二、為什麼使用 numpy & pandas