帶你看懂pandas中的兩種數據結構

Pandas是基於Numpy的一種工具,這個工具是爲了解決數據分析任務而建立的,pandas歸入了大量的庫和一些標準的數據模型,提供了高效的操做大型數據集所需的工具,pandas提供了大量能使咱們快速便捷的處理數據的函數和方法。Pandas是使Python成爲強大而高效的數據分析環境的重要因素之一。另外html

在pandas包含了三種數據結構:html5

  • Series
  • DataFrame
  • Time-series

下面咱們就介紹一下Series和DataFrame這兩種經常使用的數據結構,Time-series時間序列,咱們後期會專門在開一篇文章仔細的去講述一下。python

1、Seriesmysql

Series是一維數組,與Numpy中的一維array相似。兩者與Python基本的數據結構List也很相近,其區別是:List中的元素能夠是不一樣的數據類型,而Array和Series中則只容許存儲相同的數據類型,這樣能夠更有效的使用內存,提升運算效率,而且series能夠運用Ndarray或字典的幾乎全部索引操做和函數,融合了字典和ndarray的優勢。sql

一、series索引數據庫

Series類型是由一組數據及與之相關的數據索引組成編程

自動索引:不建立系統自動建立索引。json

自定義索引:自定義索引,建立完自定義索引後,自動索引也在。數組

Series是一維帶’標籤’數組,它的基本操做相似Ndarray和字典,genuine索引對齊。數據結構

二、建立對象

Series(列表/元組/字典/標量/Numpy數組/range等序列,<index=param1>)不寫index會自動建立索引,若是寫定指定索引,index能夠是列表,numpy數組。

列子以下:

  • 參數:列表或元組,並分別建立自動索引和手動索引(自動索引還在)

image

能夠看出index('a', 'b', 'c', 'd', 'e')分別對應1,3,5,7,9

  • 參數:字典,並分別建立自動索引和手動索引

字典的key做爲索引,value做爲值

image

若是字典中在設置index,就至關因而從字典中挑選數據

image

image

  • 參數:標量

image

image

Index能夠是列表,元組,range序列,numpy數組

image

  • 參數:numpy數組(ndarray)

image

三、屬性

Series的主要屬性包括index和values兩部分

屬性

說明

Values

獲取數據,底層存儲的是numpy數組

Index

獲取索引

還有兩個不過重要的屬性

Name

Series的name(在DataFrame中沒有Name屬性)

Index.name

索引的name

還有一些相似於numpy數組的屬性,好比dtype和shape等。

下面是一些屬性的列子:

image

3.1Values值

image

3.2Index索引

image

3.3Name,series的名字

image

3.4Index,series索引的名字

image

四、選取

  • series類型的選取相似numpy數組,索引的方式相同,採用[],numpy中的運算和操做可用於series類型,能夠經過自定義索引的列表進行切片也能夠經過自動索引進行切片,若是存在自定義索引,則一同被切片

image

  • series類型的操做相似於python字典類型:

經過自定義索引訪問,保留字in操做,使用.get()方法

image

PS:.get(key,default=none)函數返回指定鍵的值,若是值再也不字典中則返回默認值(默認爲空),key是要查找的鍵,default是設置的默認值。

五、series類型對齊操做

Series+series,series類型在運算中會自動對齊不一樣索引的數據。

  • Series類型對齊

image

六、獲取,設置,刪除等

6.1獲取值

因爲具有numpy數組和字典的特性,series能夠像使用numpy數組的索引切片或用字典的get同樣來用。

image

6.2設置/修改:索引和切片

image

  • 將a修改成11

image

  • 將b,c修改成100

image

  • 將b,c改成101和102

image

  • 將b,c改成103和104(注意此次用的是逗號,表示單獨挑選出了b和c,上面是b到c)

image

6.3刪除

drop方法(結果改變)和pop(像字典的用法,改變自身)

  • Drop:

image

  • 刪除a,結果改變

image

  • 刪除b和d

image

  • Pop:

image

2、DataFrame

DataFrame類型由公用相同索引的一組序列組成,是一個表格型的數據類型,每列值類型能夠不一樣。DataFrame即有行索引也有列索引:

  • Index axis = 0(默認)
  • Column axis = 1(默認)

DataFrame經常使用於表達二維數據,但能夠表達多維數據,基本操做相似於Series,依據行列索引

一、DataFrame的建立

1.一、從內存中建立

語法:

DataFrame(字典/列表/numpy數組/DataFrame,index=0,columns=1)也能夠在建立的時候不指定index和columns,在建立完後單獨設置這兩個屬性。

經常使用的參數:

  • 字典:key做爲列名,value做爲該列的值。
  • 列表:做爲值
  • Numpy數組:做爲值

例子:

image

  • 列表

image

手動建立行索引和列索引,方法1:建立的時候就設置好行列索引

image

手動建立行列索引,方法2:建立的時候設置自動索引,以後在修改

image

  • 二維numpy數組

手動輸入數組

image

使用方法生成數組

image

  • 字典(key是列名,value能夠是數據,也能夠是series類型)

手動建立列索引,行索引自動建立

image

手動建立列索引,手動建立行索引

image

1.二、從文件中建立

DataFrame能夠從文件中建立:

文件第一行默認做爲列索引(columns),默認爲沒有行索引,能夠經過indx_dol參數設置第1列或前幾行做爲行索引。若是第一行不做爲列索引,設置header=none。

文件編碼爲utf-8,能夠經過參數encoding設置編碼。

方式

做用

pd.read_csv(filename)

從CSV文件導入數據, 文件是逗號分隔。

pd.read_table(filename,<sep='t'>)

從限定分隔符的文本文件導入數據,默認是 tab

pd.read_excel(filename)

從Excel文件導入數據

pd.read_sql(query, connection_object)

從SQL表/庫導入數據

pd.read_json(json_string)

從JSON格式的字符串導入數據

pd.read_html(url)

解析URL、 字符串或者HTML文件, 抽取其中的tables表格

pd.read_clipboard()

從你的粘貼板獲取內容, 並傳給read_table()

下面咱們就將上面的這麼多方法一個個演示一遍,文章中用的這些數據能夠本身生成對應格式的就能夠了,這個是不影響的,只要本身掌握了這些知識就好。

image

  1. Pd.read_csv(filename):從CSV文件導入數據,文件是逗號分隔。
  • 編碼是utf-8

image

  • 編碼是gbk

image

讀取的時候,能夠帶行索引,用index_col=列

image

  • 不把第一行做爲列索引(在有些狀況下,文件中所有都是數據)

image

2)pd.read_table(filename)

image

查看DataFrame的信息http://df.info()

image

3) pd.read_excel(filename):從Excel文件中導入數據

image

4) pd.read_sql(query, connection_object):從SQL表/庫導入數據

SQLAlchemy是python編程語言下的一款ORM框架,該框架創建在數據庫API上,使用關係對象映射進行數據庫操做,簡言之即是:將對象轉換成SQL

首先導入兩個模塊,鏈接數據庫建議用sqlalchemy,使用pymysql可能會出問題

image

Sqlalchemy.create(‘mysql+pymysql://用戶名:用戶名密碼@localhost:編號/數據庫名稱’)

不清楚用戶名和編號的可使用mysql workbench查看

image

image

將文件寫入到數據庫中

image

image

Test是要在數據庫中建立的表名,表示的意思是將df的數據傳入到數據庫lianxi下的表test中

5) pd.read_json(json_string)

image

6) pd.read_html(url)

首先要安裝html5lib,pip install html5lib

image

7) pd.read_clipboard():從剪切板導入數據

首先複製一段文字

而後運行代碼

image

二、寫入文件

寫入數據後,前往輸入路徑下查看文件

方式

做用

df.to_csv(filename)

導出數據到CSV文件

df.to_excel(filename)

導出數據到Excel文件

df.to_sql(table_name, connection_object)

導出數據到SQL表

df.to_json(filename)

以Json格式導出數據到文本文件

image

1)第一種方式:將行索引和列索引肉寫入到文件

  • df.to_csv(filename):將文件導出到CSV文件中

image

  • df.to_excel(filename):導出數據到Excel文件

image

  • df.to_json(filename):以Json格式導出數據到文本文件

image

2)第二種方式:行索引不寫入

image

3)第三種方式:行和列索引都不寫入

image

三、DataFrame的屬性

屬性

說明

Values

Index

行索引

Columns

列索引

Index.name

行索引名字

Columns.name

列索引名字

其餘屬性:dtypes,shape等,能夠用numpy數組等等大部分屬性

image

  • 查看自身的屬性(重要):值,行索引,列索引

image

  • 查看自身屬性(不重要):列索引名字,行索引名字

image

  • 查看其餘屬性:可使用ndarray的屬性

image

四、DataFrame的函數和方法

4.一、取值和修改(索引,切片,ix,loc,iloc)

DataFrame的取值和修改應該從三個層次考慮:行列,區域,單元格。每一個層次都有其對應的方法:

行列df[],df.ix

區域df.ix[]

單元格df.ix

其中ix官方推薦使用iloc和loc代替

loc和iloc的用法和ix基本同樣,只是loc參數用手動索引,iloc用自動索引,ix混用

image

取行:

image

取列:

image

五、其餘函數或方法

5.1查看數據

  • df.head(n): 查看DataFrame對象的前n行

image

  • df.tail(n): 查看DataFrame對象的最後n行

image

  • df.shape: 查看行數和列數

image

image

  • df.describe(): 查看數值型列的彙總統計

image

  • s.value_counts(dropna=False): 查看Series對象的惟一值和計數

image

image

  • df.apply(函數):把df應用於某個函數

image

5.二、清洗數據

image

  • df.columns = ['a','b','c','d','e']: 重命名列名

image

  • df.isnull(): 檢查DataFrame對象中的空值, 並返回一個Boolean數組

image

  • df.notnull(): 檢查DataFrame對象中的非空值, 並返回一個Boolean數組

image

  • df.dropna(): 刪除全部包含空值的行

image

  • df.dropna(axis=1): 刪除全部包含空值的列

image

df.dropna(axis=1,thresh=n): 刪除全部小於n個非空值的列

image

  • df.fillna(x): 用x替換DataFrame對象中全部的空值

image

  • s.fillna(s.mean()): 用某列的均值來填充某列的空值

image

  • s.astype(float): 將Series中的數據類型更改成float類型

image

  • s.replace(1,'one'): 用‘one’ 代替全部等於1的值

image

  • df.rename(columns=lambda x: x + '1'): 批量更改列名

image

  • df.rename(columns={'old_name': 'new_ name'}): 選擇性更改列名

image

  • df.set_index('column_one'): 更改索引列

image

  • df.rename(index=lambda x: x + 1): 批量重命名索引

image

5.三、數據規整

  • df[df[col] > 0.5]: 選擇col列的值大於0.5的行
  • df.sort_values(col1): 按照列col1排序數據, 默認升序排列
  • df.sort_values(col2, ascending=False): 按照列col1降序排列數據
  • df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列, 後按col2降序排列數據
  • df.groupby(col): 返回一個按列col進行分組的Groupby對象
  • df.groupby([col1,col2]): 返回一個按多列進行分組的Groupby對象
  • df.groupby(col1).agg(np.mean): 返回按列col1分組的全部列的均值
  • df.groupby(col1).sum(): 返回按列col1分組的全部列的和
  • df.groupby(col1).mean()[col2]: 返回按列col1進行分組後, 列col2的均值
  • data.apply(np.mean): 對DataFrame中的每一列應用函數np.mean
  • data.apply(np.max,axis=1): 對DataFrame中的每一行應用函數np.max
  • df.pivot_table(index=col1, values=[col2,col3], aggfunc=np.mean):建立一個按列col1進行分組, 並計算col2和col3各自均值的數據透視表
  • pd.crosstab(df.col1, df.col2): 按照指定的行(col1)和列(col2)統計分組頻數

5.四、數據合併

  • df1.append(df2): 將df2中的行添加到df1的尾部

image

  • pd.concat([df1, df2],axis=0):將df2中的行添加到df1的底部(axis=1的時候將df2的列添加到df1的尾部)

image

5.五、數據統計

  • df.describe(): 查看數據值列的彙總統計

image

  • df.mean(): 返回全部列的均值

image

  • df.corr(): 返回列與列之間的相關係數

image

  • df.count(): 返回每一列中的非空值的個數

image

  • df.max(): 返回每一列的最大值

image

  • df.min(): 返回每一列的最小值

image

  • df.median(): 返回每一列的中位數

image

  • df.std(): 返回每一列的標準差

image

相關文章
相關標籤/搜索