1. 程式人生 > >Pandas——進階一(資料處理)

Pandas——進階一(資料處理)

目錄
以下所有的例子都匯入以下包
import pandas as pd
from pandas import DataFrame,Series
import numpy as np
from numpy import nan as Na

一、Pandas資料算術運算

1.1 Dateframe元素相加

在將物件相加時,如果存在不同的索引對,則結果的索引就是該索引對的並集。
這裡寫圖片描述
這裡寫圖片描述

1.2 Dateframe與Series元素相減

現將一維資料廣播成二維,再進行運算
這裡寫圖片描述
這裡寫圖片描述

1.3 apply 與 applymap

這裡寫圖片描述
這裡寫圖片描述

二、Pandas資料修改

2.1 資料複製–直接賦值
    若直接賦值的話,只是複製索引,元素儲存在相同記憶體位置中,對元素修改會影響另外一個

    train1 = train.head()
    train1.iloc[0,0]    #源資料
    train.iloc[0,0] = 100 #修改其中一個物件

    #對2個物件都起作用
    train.iloc[0,0]
    train1.iloc[0,0]
2.2 資料複製–copy()函式
    對索引、記憶體進行復制,還建立了新儲存位置,對元素修改不影響另外一個

    train1 = train.head().copy()
    train1.iloc[0,0]    #源資料
    train.iloc[0,0] = 200 #修改其中一個物件

    #只對修改的物件起作用
    train.iloc[0,0]
    train1.iloc[0,0]
2.3 行列刪除
▶ Del 只能刪除一列:del df['column_name']

        train1.column
        del train['Age']
        train.column

 ▶ pd.drop 刪除多列:pd.drop(labels,axis=1,inplace = False)

        labels:行列名稱列表
        axis: 0表示刪除行,1表示刪除列
        inplace: False表示源 DataFrame 不變(預設)
             True 表示源 DataFrame改變

             train1.columns
             train1.drop(labels=['Name','Ticket'],inplace=True,axis=1)
             train1.column

▶  pd.pop() 只能刪除一列並把刪除的一列賦值給新的物件
        train.columns
        sex = train.pop('Sex')
        train1.columns
        type(sex)

▶  pd.drop 刪除行:pd.drop(labels,axis=0,inplace = False)

        train1.index
        train1.drop(labels=['index1','index3'],inplace=True,axis=0)
        train1.index
示例:(刪除是操作檢視)
df = DataFrame(np.arange(20).reshape((4,5)),
            index = ["山東","山西","湖南","湖北"],
            columns = ["one","two","three","four","five"])
>>>
    one two three  four five
    山東  0   1   2   3   4
    山西  5   6   7   8   9
    湖南  10  11  12  13  14
    湖北  15  16  17  18  19

df.drop(["湖南","山東"])             #預設刪除行
>>>
    one two three  four five
    山西  5   6   7   8   9
    湖北  15  16  17  18  19

df.drop(["one","two"],axis = 1)     #指定axis = 1 刪除列
>>>
      three four five
    山東  2   3   4
    山西  7   8   9
    湖南  12  13  14
    湖北  17  18  19
2.4 列增加
▶  通過 [] 操作符+列名方式增加多列
    #新增列在最後
    df['new_column1','new_column2'……] = 

        train1.columns
        train1.[['age_copy','sex_copy']]= train[['Age','Sex']]
        train1.columns

▶  通過 loc+列名新增,不能新增多列
#新增列在最後
    pd.loc[:,'new_column'] =

    train1.columns
    train1.loc[:,'new_copy'] = train['Name'] #每列只能插入一列
    train1.columns

▶  通過 insert(loc,column,value,allow_duplicates = False)
    loc 位置引數:0<=loc <=len(columns)
    新增列在中間,一次只能增加一列

    #新增列在指定位置,只能插入單列
    train1.columns
    train1.insert(1,'insert_column',np.linspace(0,1,len(train1 )))
    train1.columns
2.5 行增加
通過 loc函式新增一行,不能新增多行
    pd.loc[:,'new_index'] =

    #新增行在最後,只能插入單行
    train1.index
    train1.loc['new_copy'] = train1.loc['index'] 
    train1.index

三、索引重新命名

3.1 整體重新命名
pd.index =
pd.column =

#整體重新命名,不能生成新的物件
train1.index
train1.index ='new_' = train1.index 
train1.index
3.2 部分重新命名
● 列行同時修改
    rename(index = None,columns = None,**kwargs)
        inplace:boolean,default False(生成新物件)
        copy: inplace為 False 時生效,表示只是生成新的行列索引。True 時,建立新的儲存位置

    train2 = train.rename(index={'index':'new_index',……},columns = {'column':'new_column'})
    train2.index.difference(train1.index)   #檢視新索引
    train2.column.difference(train1.columns)    

● 單獨修改行列
    rename_axis(mapper,axis = 0,copy = True,inplace = False)
    mapper:dict示例為{'oldname':'newname'}
    axis:0表示行,1表示列

    train2 = train1.rename_axis(mapper={'name':'new_name',……},axis =1)
    train2.columns.difference(train1.column)    

四、索引順序調整

4.1 同時調整行和列
reindex(index = None,columns = None,**kwargs)

fill_value:出現新的索引時預設的值
method = ffill ffill/pad 前向填充; bfill/backfill 後向填充
4.2 單獨調整行或列
reindex_axis(labels,axis = 0,method = None copy = True,fill_value = NaN)

五、列格式修改

astype(dtype,copy = True)只能生成新物件

dtype取值方式
1:格式:np.float64
2: 字典{'column_name':np.float64,……}

六 、資料排序

pd.sort_index(axis= 1,ascending = False, inplace = True)

train.sort_index(axis= 1,ascending = False, inplace = True)
    ascending #順序排序/ False倒序排序(大->小)

列值排序
pd.sort_values(by = 'b',ascending = False, inplace = True)

這裡寫圖片描述
這裡寫圖片描述

七 、資料轉換(索引列名轉換)df.T

train2 = train.T
train.info()
train2 

轉換後會將 數值型轉換為字串

八、重複值、唯一值、統計

8.1 重複值檢視
duplicated(subset = None,keep = 'first')
Subset 是否只需要檢查某幾列
Keep:First:支援從前向後,後面出現的為重複值
      Last: 從後至前
8.2 刪除重複值
drop.duplicates(subset = None,keep = 'first',inplace= False)
data=DataFrame({"k1":["one"]*3+["two"]*4,
                'k2':[1,1,2,3,3,4,4]})
輸出:data
    k1  k2
0   one 1
1   one 1
2   one 2
3   two 3
4   two 3
5   two 4
6   two 4

mask = data.duplicated()
輸出:
0    False
1     True
2    False
3    False
4     True
5    False
6     True
dtype: bool

這裡寫圖片描述
這裡寫圖片描述

8.3 統計重複值

這裡寫圖片描述
這裡寫圖片描述

九、部分值替換

replace(to_replace = None,value = None,regex = False,inplace = False)

▶直接指定方式:to_replace 與value 配套使用。old->new
    單獨值:        to_replace = old            value = new
    相同長度list:   to_replace = [old1,old2]    value = [new1,new2]
    list->單值     to_replace = [old1,old2]     value = new

指定相同列dict:to_replace={col1:old1,col2:old2} value={col1:new1,col2:new2}
dict->單值:     to_replace={col1:old1,col2:old2} value=new

old,new組成dict: to_replace={old:new1,old2:new2}  value=new

▶正則匹配法:to_replace、value、regex 搭配使用
所有使用方式和上面一致,只是多了regex = True ,to_replace 值用正則表示
缺失值處理 - isnull
缺失值處理步驟:
缺失值確認:isnull notnull
缺失值處理:dropno fillna

這裡寫圖片描述

十、缺失值處理 -isnull

缺失值處理步驟:
    缺失值確認:isnull,notnull
    缺失值處理:dropna,fillna

    isnull(): 返回一個含有布林值的物件,表示哪些值是NA
    Notnull(): isnull的否定式

缺失值處理 -dropna()
    判定指定軸是否存在缺失資料,對軸進行過濾(調節閾值對缺失值的容忍度)
    DataFrame.dropna(axis = 0,how="any",thresh=None,subset=None,inplace=False)
    how:    any表示出現Na就刪除,all表示所有制為Na才刪除
    thresh:  指定非缺失值個數,若個數沒有超過這個thresh,則刪除
    inplace: false表示原DataFrame不變,生成新物件(操作檢視)

缺失值處理 -fillna
    用指定值或者插值方法,填充缺失值資料
    DataFrame.fillna(value =None,methed=None,axis=None,inplace=None,downcast=None,**kwargs)
    value: 填充值的標量值或者字典物件,與methed只能同時使用一個,只能用於列填充,axis不能賦值
    axis:  待填充的軸
    limit: 可以連續填充最大數量(method為ffill,bfill時有效)

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

相關推薦

Pandas——資料處理

目錄 以下所有的例子都匯入以下包 import pandas as pd from pandas import DataFrame,Series import numpy as np from

python檔案的處理方式

一、檔案操作方法:                           檔案操作的結果都是str,需要將 str轉化為 python 的物件才能後續進行操作。 1

Pandas筆記 Groupby 重難點總結

如果Pandas只是能把一些資料變成 dataframe 這樣優美的格式,那麼Pandas絕不會成為叱吒風雲的資料分析中心元件。因為在資料分析過程中,描述資料是通過一些列的統計指標實現的,分析結果也需要由具體的分組行為,對各組橫向縱向對比。 GroupBy 就是這樣的一個有力武器。事實上,SQL語言在Pand

python簡易爬蟲

一、爬蟲的基本知識: 1、爬蟲的理解:          (1)網路爬蟲,即Web Spider,網路蜘蛛是通過網頁的連結地址來尋找網頁的。 2、爬蟲的設計過程:          根

IntelliJ IDEA的外掛使用 Lombok

當我們使用idea的時候,有很多註解的使用能大大的減少我們的程式碼量,使我們的程式碼看起來更加的簡潔清晰,方便了我們程式設計師的程式碼開發,在idea中就有一個Lombok的外掛,其有很多我們不知道的註解使用,下面我們就來具體的看一下如何的使用Lombok。 首先我們需要安裝Lombok

iOS開發筆記之七十四——FRP與RAC資料黑白板XYReactDataBoard的介紹

******閱讀完此文,大概需要30分鐘****** 一、簡介 XYReactDataBoard是一款已經比較成熟的基於RAC的響應式程式設計元件,它主要用來實現任意模組之間的資料通訊,它可以替代原生的Notification、KVO,delegate、NSUserdef

Pod控制器應用kubernetes service

kubernetes service是強依賴CoreDNS或者是kube-dns功能 node network節點網路 pod network pod網路 cluster network service ip kube-proxy元件是監控apiservice和service 資源變動的資訊,通

spring cloud消費者feign

一、Feign簡介 Feign是一個宣告式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要建立一個介面並註解。它具有可插拔的註解特性,可使用Feign 註解和JAX-RS註解。Feign支援可插拔的編碼器和解碼器。Feign預設集成了Ribbon,並和Eureka結合,

Less迴圈等用法MD.6

有幾天沒更新我的漫島系列了哈,設定十一月底完成漫島的第一版,時間挺緊迫的,另外,大家能看到的漫島的部分頁面,就截止到個人中心了,其餘的先不給看了。 由於知識雜又多,記不過來,像less稍微複雜一點的語法,每次我還得查一查文件,所以把平時遇到的比較不常規的用法記錄下來,隨時查閱。

學校OJ——26位制字串處理

問題 B: 26進位制數 時間限制: 1 Sec 記憶體限制: 32 MB 提交: 831 解決: 249 [提交][狀態][討論版] 題目描述 現在我們用A表示26,用B表示25,依次類推,到用Z表示1,即A=26, …X = 3, Y = 2, Z=1,用這種方式構建一個26進位制的計數

Redis核心技術主從複製

Redis主從複製 分析:主從複製:容錯。 思考:主從複製,需要至少2臺redis服務。一臺主機器(讀寫),一臺從機器(備份,讀)。          模擬2個redis服務:          建立2個redis服務,2個redis服務埠不相同。 建立redis

Anaconda安裝和使用Numpy、scipy、pandas、Scikit-learn資料分析2018年12月28日

1、Anaconda介紹 安裝python的方法有很多種,資料分析方面比較常用Anaconda。Anaconda是一個開源的Python發行版本,其包含了conda、Python等多個科學包及其依賴項,也可以使用Miniconda這個較小的發行版,僅包含conda和 Python。Anacond

Python 用法 持續更新

裝飾器(Decorator) Python 的裝飾器是任何可呼叫物件(callable object),用於修改函式(Function)或類(Class)。按照用途可分為: 函式裝飾器 類裝飾器 裝飾器的介面定義可概括為: 接收某個函式或類的引用作為引數; 修改該函式或類並返回

IDEA Window 安裝破解與使用超全

IDEA 全稱 IntelliJ IDEA,是java語言開發的整合環境,IntelliJ在業界被公認為最好的java開發工具之一,尤其在智慧程式碼助手、程式碼自動提示、重構、J2EE支援、各類版本工具(git、svn、github等)、JUnit、CVS整合、程式碼分析、

SQL基礎面試基礎—Part 2

前言 本文原題及實驗資料均出自: http://www.cnblogs.com/edisonchou/p/3886801.html,但本文是基於SQL Server的訓練模型,經過筆者的簡單改動,現用於訓練SQL/HQL。本文只針對DML語句進行訓練,原文中還有很多DDL訓

Redis核心技術Java開發

Jedis Jedis使用java語言開發的程式,用來連線redis服務java API。呼叫jedis 介面就可以操作redis服務。 建立java工程 建立java工程,匯入jar檔案。

最牛Java架構師路線年薪80W

1、原始碼分析專題 詳細介紹原始碼中所用到的經典設計思想,看看大牛是如何寫程式碼的,提升技術審美、提高核心競爭力。

python—OpenCV之影象處理

文章目錄 顏色空間轉換 RGB色彩空間 HSV色彩空間 YUV色彩空間 簡單的物體跟蹤示例 HSV空間目標閾值選取 影象幾何變換 影象的縮放 影象的位移 影象的旋轉 影

C#系列——WebApi 異常處理解決方案

機制 輸出 ges 如果 但是 rom lba slist 解決 出處:http://www.cnblogs.com/landeanfen/p/5363846.html 閱讀目錄 一、使用異常篩選器捕獲所有異常 二、HttpResponseException自

【SSH之路】Struts + Spring + Hibernate 開端

height 一段 ioc 效率 陽光大道 面向對象的思想 text ase 們的 Long Long ago。就聽說過SSH。起初還以為是一個東東,詳細內容更是不詳,總認為高端大氣上檔次,經過學習之後才發現,不不過高大上,更是低調奢華有內涵,經過一段時間的