Python數據分析之pandas入門

一、pandas庫簡介

pandas是一個專門用于數據分析的開源Python庫,目前很多使用Python分析數據的專業人員都將pandas作為基礎工具來使用。pandas是以Numpy作為基礎來設計開發的,Numpy是大量Python數據科學計算庫的基礎,pandas以此為基礎,在計算方面具有很高的性能。pandas有兩大數據結構,這是pandas的核心,數據分析的所有任務都離開它們,分別是Series和DataFrame。

二、pandas庫的安裝

paandas安裝較為簡單,如果使用Anaconda的話,就在終端輸入命令 “conda install pandas” 就能安裝;如果電腦安裝了pip的話,就在終端輸入命令 “pip install pandas” 就能安裝成功。安裝完成后,可以在終端輸入 “import pandas as pd” ,測試pandas是否安裝成功。

三、Series的使用

Series用來表示一維數據結構,跟數組類似,它由兩個相關聯的數組組成,其中一個叫index的數組用來存儲標簽,這些標簽與另一個數組中的元素一一對應。如下圖所示:

聲明Series對象時,需要調用Series()構造函數,并傳入一個數組作為Series的主數組,比如:
import pandas as pd
ser=pd.Series([12,33,55,66])
print(ser)'''輸出為
0    12
1    33
2    55
3    66
dtype: int64
'''

運行上面的代碼,可以知道,如果不指定標簽,那么默認標簽就是從0開始遞增,我們也可以在聲明一個Series對象時給它指定標簽:

import pandas as pd
ser=pd.Series([12,33,55,66],index=['a','s','d','f'])
print(ser)'''輸出為:
a    12
s    33
d    55
f    66
dtype: int64
'''
我們可以通過Series的index很方便得到其內部元素,或者為某元素賦值:

import pandas as pd
ser=pd.Series([12,33,55,66])
print(ser[2])
ser[2]=99
print(ser[2])'''輸出為:
55
99
'''
Series對象可以進行運算,比如加減乘除,也可以使用Numpy中的數學函數來對它進行計算:

import pandas as pd
ser=pd.Series([12,33,55,66])
ser2=ser/2
print(ser2)import numpy as np
print(np.log(ser))'''輸出為:
0     6.0
1    16.5
2    27.5
3    33.0
dtype: float64
0    2.484907
1    3.496508
2    4.007333
3    4.189655
dtype: float64
'''
從上面可以看出,Series對象似乎跟字典很相似,我們可以把Series對象當作字典來使用,我們在創建Series對象時,將創建好的字典傳入Series的構造函數即可,這樣字典的鍵就組成了索引數組,每個索引對應的元素就是字典中對應的值:

import pandas as pd
dic={'wife':'kathy','son':'mary','mother':'lily','father':'tom'}
ser=pd.Series(dic)
print(ser)'''輸出為:
wife      kathy
son        mary
mother     lily
father      tom
dtype: object
'''

四、DataFrame的使用

DataFrame這種數據結構針對的是多維數據,由按一定順序排列的多列數據組成,列之間的數據類型會不同,如下圖所示:

從圖中可以看出,DataFrame對象有兩個索引數組,第一個數組index與行相關,這與Series相似,每個index標簽與所在行的所有元素相關聯。它的第二個數組包含一系列標簽,每個標簽下包含一列數據。可以將DataFrame理解為由多個Series對象組成的字典,每一列的名稱為字典的鍵,Series作為字典的值。
創建DataFrame對象的常用方法就是傳遞一個字典對象給DataFrame()構造函數:

import pandas as pd
dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['','','','']}
frame=pd.DataFrame(dic)
print(frame)'''輸出為:name  age sex
0   tom   14   男
1  mary   15   男
2  john   77   女
3  mike   45   男
'''
跟Series對象類似。DataFrame如果沒有明確指定標簽,那么它的默認標簽也是從0開始遞增。如果我們想知道DataFrame對象所有列的名稱,則調用columns屬性就可以了,獲取索引列表的話就調用index屬性,調用values屬性將獲取所有的元素。可以給DateFrame對象添加列:

import pandas as pd
dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['','','','']}
frame=pd.DataFrame(dic)
frame['weight']=[89,99,145,123]
print(frame)'''輸出為:name  age sex  weight
0   tom   14   男      89
1  mary   15   男      99
2  john   77   女     145
3  mike   45   男     123
'''
在數據處理中,有有時也會用到DataFrame的轉置操作,即把行變為列,列變為行,調用DataFrame的T屬性即可完成轉置:

import pandas as pd
dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['','','','']}
frame=pd.DataFrame(dic)
print(frame.T)'''輸出為:0     1     2     3
name  tom  mary  john  mike
age    14    15    77    45
sex     男     男     女     男
'''

五、Series與DataFrame對象之間的運算

pandas允許Series對象與DataFrame對象進行運算,定義Series和DataFrame對象時,把Series對象的索引和DataFrame的列名稱保持一致:

import pandas as pd
import numpy as np
frame=pd.DataFrame(np.arange(16).reshape((4,4)),index=['age','name','sex','weight'],columns=['john','tom','mary','cathy'])
print(frame)
ser=pd.Series(np.arange(4),index=['john','tom','mary','cathy'])
print(ser)
res=frame-ser
print(res)'''輸出為:john  tom  mary  cathy
age        0    1     2      3
name       4    5     6      7
sex        8    9    10     11
weight    12   13    14     15john     0
tom      1
mary     2
cathy    3
dtype: int32john  tom  mary  cathy
age        0    0     0      0
name       4    4     4      4
sex        8    8     8      8
weight    12   12    12     12
'''
可以看出,DataFrame對象的各元素分別減去了Series對象中索引與之相同的元素,DataFrame對象每一列的所有元素都執行了減法操作。

轉載于:https://www.cnblogs.com/IAMTOM/p/10216337.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252683.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252683.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252683.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

激光雷達和毫米波雷達的區別

什么是激光雷達 激光雷達,是以發射激光束探測目標的位置、速度等特征量的雷達系統。其工作原理是向目標發射探測信號(激光束),然后將接收到的從目標反射回來的信號(目標回波)與發射信號進行比較&#xff0c…

Git—使用方法

1、:插件的安裝(eclipse LUNA版本之后已經自動集成,不需要安裝插件)、 * 先打開該網頁提供了對應版本的EGit,自己選擇相應的版本。(http://wiki.eclipse.org/EGit/FAQ#Where_can_I_find_older_releases_of_EGit.3F&…

激光雷達與毫米波雷達對比

激光雷達是一種采用非接觸激光測距技術的掃描式傳感器,其工作原理與一般的雷達系統類似,通過發射激光光束來探測目標,并通過搜集反射回來的光束來形成點云和獲取數據,這些數據經光電處理后可生成為精確的三維立體圖像。采用這項技…

安全可靠國產系統下的應用怎么搭建?

據國家信息安全漏洞共享平臺(CNVD)統計數據,2016年我國共收錄通用軟硬件漏洞 10822個,漏洞來源涵蓋了眾多知名的國外廠商。應用軟件的不安全性對我國信息技術發展產生了重大威脅,近年來我國頻繁發布信息安全相關政策&a…

Win10 + Python + MXNet + VS2015配置

項目需要使用MTCNN來檢測、對齊、剪切出人臉,它是使用MXNet作為框架的,但是我自己的Ubuntu里各種框架亂成一團,不想再添亂就鐵了心要在windows里配一個。無奈網上的資料不多,掙扎了幾天之后決定留下這么一份文檔。 首先我們使用的…

bzoj 3224 Tyvj 1728 普通平衡樹

題目大意: 您需要寫一種數據結構(可參考題目標題),來維護一些數,其中需要提供以下操作: 1. 插入x數 2. 刪除x數(若有多個相同的數,因只刪除一個) 3. 查詢x數的排名(若有多個相同的數&#xff0c…

不懂毫米波雷達?5分鐘讀懂毫米波雷達的那些事兒

2019年是毫米波風生水起的一年,也是毫米波名聲大噪的一年。毫米波應用范圍廣泛,如毫米波雷達、毫米波天線等。而本文,將向大家介紹毫米波雷達,主要內容包括:毫米波雷達原理、毫米波雷達主要特點、毫米波雷達優勢以及毫…

飛鴿傳書(IPMSG)協議(翻譯稿)

協議聲明: 本協議是由日本人Shirouzu Hiroaki (白水 啟章)先生編寫。 wanpengcoder翻譯于Mr.Kanazawa英文文檔,轉載請注明出處。 http://www.cnblogs.com/wanpeng/ 如有翻譯不當之處望提出,以便改進,衷心感…

redis集群的搭建

########環境######### centos 7.2 , gcch 環境ruby 2.0.0 redis 3.2.8 redis-3.3.3gem 公司要求搭建redis集群, 本來覺得挺好搞的,沒想到弄到現在.... 1, 環境準備 gcc , ruby 等環境準備 yum -y install gcc ruby ruby-devel rubygems rpm-build zlib redis-ruby接口安裝, 我…

2017-2018-1 20155227 《信息安全系統設計基礎》第十三周學習總結

2017-2018-1 20155227 《信息安全系統設計基礎》第十三周學習總結 找出全書你認為最重要的一章,深入重新學習一下,要求(期末占10分): 完成這一章所有習題詳細總結本章要點給你的結對學習搭檔講解你的總結并獲取反饋我選…

進程間五種通信方式

進程間通信(IPC,InterProcess Communication)是指在不同進程之間傳播或交換信息。 IPC的方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket、Streams等。其中 Socket和Streams支持不同主機…

電子書下載:Silverlight 5 in Action

下載:http://www.ctdisk.com/file/8447319

git 的使用方法

git 的使用有3個主要步驟: 1.1 工作區域操作: 在自己的git賬號下構建一個工作目錄, 并往工作目錄里添加文件內容(cp /root/data/VIP_Amount_prediction/* ./)。 cd 當前工作目錄, git init, 初始…

Codeforces 898E Squares and not squares

題目大意 給定 $n$($n$ 是偶數,$2\le n\le 2\times 10^{5}$)個非負整數 $a_1,\dots, a_n$($a_i\le 10^9$)。 要求將其中 $n/2$ 個數變成平方數,另外 $n/2$ 個數變成非平方數,變化后的數必須仍是…

UTC時間

每個地區都有自己的本地時間,在網上以及無線電通信中時間轉換的問題就顯得格外突出。我自己就經常混淆于此,特地研究了一下,記錄在此以備忘。 整個地球分為二十四時區,每個時區都有自己的本地時間。在國際無線電通信場合&#xff…

Virtualbox橋接網卡設置

正常情況下,像設置virtualbox虛擬機的橋接網卡非常簡單,只需要點配置,然后在配置界面點擊網絡,然后在右邊的網絡里選擇橋接網絡即可。但是如果這么簡單就好了,今天要說的就是在不正常的情況下是怎么設置的。 工具/原料…

利用CSS、JavaScript及Ajax實現圖片預加載的三大方法

預加載圖片是提高用戶體驗的一個很好方法。圖片預先加載到瀏覽器中,訪問者便可順利地在你的網站上沖浪,并享受到極快的加載速度。這對圖片畫廊及圖片占據很大比例的網站來說十分有利,它保證了圖片快速、無縫地發布,也可幫助用戶在…

ThinkJS前端搭配vue時的Nginx配置

Thinkjs 作為奇舞團開源的nodejs mvc框架之一,引起了很多NodeJS程序員的親賴。但是其關于靜態文件處理部分支持不夠完善,主要是體現在SPA單頁應用,之前在ThinkJS 2.*版本時寫過一個關于處理單頁應用靜態資源的middleware think-resource-spa,…

SQL疑難雜癥【4 】大量數據查詢的時候避免子查詢

前幾天發現系統變得很慢,在Profiler里面發現有的SQL執行了幾十秒才返回結果,當時的SQL如下: 可以看得出來,在652行用了子查詢,恰巧目標表(QS_WIP)中的記錄數為100000000,通過如下SQL可以得到: S…

2020-11-27

總結各種RGB轉YUV的轉換公式 如果數據位寬都以8位來說.ITU709:允許 0~255之間所有數據 ITU601:只允許 16~235之間數據, 601是SDTV的數據結構; 656是SDTV的interface 709是HDTV的數據結構 ;1120是HDTV的interface 最近在學習視頻的顏色空間轉換&#x…