Pandas的結構和應用

Pandas處理以下三個數據結構 -

  • 系列(Series)----一維ndarray

      ? ? ? 特點:帶有標簽,可以使用標簽作為索引,大小不能改變,內部數據可以改變。

    ? ? ? ? ? 屬性:與NumPy類似,多了一個軸標簽axis lables

  • 數據幀(DataFrame)---二維ndarray? ? ? ? ? ? ? ? ? 特點:帶標簽,可以同行列標簽索引,尺度可變,數據可變
  • 面板(Panel) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?特點:面板是具有異構數據的三維數據結構。在圖形表示中很難表示面板

這些數據結構構建在Numpy數組之上,這意味著它們很快。

考慮這些數據結構的最好方法是,較高維數據結構是其較低維數據結構的容器。 例如,DataFrameSeries的容器,PanelDataFrame的容器。

1.對象的創建:數組 ?字典 ?標量值或常數

import pandas as pd
import numpy as nps = pd.Series([1,3,5,np.nan,6,8])print(s)

輸出:

0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64

通過傳遞numpy數組,使用datetime索引和標記列來創建DataFrame

dates = pd.date_range('20180701', periods=7)
print(dates)print("--"*16)
df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=list('ABCD'))
print(df)

輸出:

DatetimeIndex(['2018-07-01', '2018-07-02', '2018-07-03', '2018-07-04','2018-07-05', '2018-07-06', '2018-07-07'],dtype='datetime64[ns]', freq='D')
--------------------------------A         B         C         D
2018-07-01 -0.500163  0.032670 -1.026652 -0.444624
2018-07-02  0.870395 -1.879662  0.476651  0.546444
2018-07-03 -0.182999 -0.497964  0.840211  0.256168
2018-07-04  1.130527 -0.664251 -0.226294  1.660457
2018-07-05 -1.304568  0.204915  0.366062  1.905667
2018-07-06  0.605275  0.356298 -0.561465 -0.000841
2018-07-07  0.226876  0.998272  0.592386  0.306725

2.查看數據

x.head()可以查看頂部數據 ? ? ? ?x.tail()可以輸入參數,查看指定個數的底部數據

?

df1 = pd.DataFrame([22,24,54,65,76,88,98],  columns=list('A'))
print(df1.head())
print("--------------" * 10)
print(df1.tail(3))

?

輸出:

  

    A
0  22
1  24
2  54
3  65
4  76
------------------------------------------------------------------------------------A
4  76
5  88
6  98

3.x.describe()描述顯示數據的快速統計摘要,參考以下示例代碼

dates = pd.date_range('20180701', periods=7)
df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=list('ABCD'))
print(df.describe())

輸出:

           A         B         C         D
count  7.000000  7.000000  7.000000  7.000000
mean  -0.051137 -0.290501 -0.308145 -0.287636
std    0.720711  1.084754  0.946105  0.615045
min   -0.766295 -1.789795 -1.962022 -1.262667
25%   -0.658085 -1.213707 -0.778745 -0.468529
50%   -0.286046  0.302139  0.020762 -0.379909
75%    0.496656  0.476699  0.207962 -0.100779
max    1.017243  0.928164  0.925811  0.767738

4.排序

(1)標簽索引的排序----sort_index(axis=1,ascending=False)

  其中ascending默認為True,升序排序

(2)元素單列排序:----sort_values(by=‘B’)

  默認會按所在列進行升序排序

5.選擇系列元素 , 通過【】使用

值得注意的是:利用dataframe時,做切片用的標簽邊界可以取到,而作為下標的右邊界是取不到的。

(1)按標簽選擇:loc /at ? ? 按下標選擇:iloc/iat

?

print(df.loc[dates[0]])

?

輸出:

A    1.320921
B    0.522823
C    0.340569
D   -1.911398
Name: 2017-01-01 00:00:00, dtype: float64

(2)通過標簽選擇多軸,其中:處也可以寫行標簽

print(df.loc[:,['B','D']])

輸出:

                   B         D
2017-01-01  0.522823 -1.911398
2017-01-02 -0.354351 -1.719314
2017-01-03 -0.166968 -0.623292
2017-01-04 -1.198105  0.824853
2017-01-05 -0.829653  0.310548
2017-01-06 -0.964786  0.051597

?

?

(3)布爾索引

也可以根據isin()的參數條件進行過濾,使用參考教程。

print(df[df.A>0])

輸出:

                   A         B         C         D
2017-01-01  1.320921  0.522823  0.340569 -1.911398
2017-01-03  0.991224 -0.166968  0.840899 -0.623292
2017-01-04  0.240294 -1.198105  0.021427  0.824853
2017-01-06  0.683117 -0.964786 -0.159696  0.051597

5.(1)列的選擇 ?df['列名']

  (2)列的添加:df['列名']=df.Serices[數組]

  (3)列的刪除:del ?df['列名']

6.(1)行的選擇 ?df[]切片、loc標簽索引

  (2)行的添加:df.append(df系列)

  (3)行的刪除:df.drop(索引)

7.迭代

for col in df:print (col)

輸出:

A
B
C
D

表示:如果只是迭代df對象,而非他的迭代器迭代,則只會輸出dataframe的列名。

(1)所以迭代列應該為:

for key,value in df.iteritems():print (key,value)

(2)迭代行為:

for row_index,row in df.iterrows():print (row_index,row)

(3)itertuples()方法將為DataFrame中的每一行返回一個產生一個命名元組的迭代器。元組的第一個元素將是行的相應索引值,而剩余的值是行值。

?

注意 - 不要嘗試在迭代時修改任何對象。迭代是用于讀取,迭代器返回原始對象(視圖)的副本,因此更改將不會反映在原始對象上。

7.分組和聚合

?

GroupBy()/ Agg()

(1)任何分組(groupby)操作都涉及原始對象的以下操作之一。它們是 -

  • 分割對象
  • 應用一個函數
  • 結合的結果

在許多情況下,我們將數據分成多個集合,并在每個子集上應用一些函數。在應用函數中,可以執行以下操作 -

  • 聚合?- 計算匯總統計
  • 轉換?- 執行一些特定于組的操作
  • 過濾?- 在某些情況下丟棄數據

?

?

df.groupby('列名').groups

grouped = df.groupby('列名')for name,group in grouped:print (name)print (group)

  get_group()方法,可以選擇一個組

(2)聚合函數為每個組返回單個聚合值。當創建了分組(group by)對象,就可以對分組數據執行多個聚合操作。

一個比較常用的是通過聚合或等效的agg方法聚合。

grouped = df.groupby('列名1')
print (grouped['列名2'].agg(np.mean))

(3)轉換

分組或列上的轉換返回索引大小與被分組的索引相同的對象。因此,轉換應該返回與組塊大小相同的結果。

print (grouped.transform(score))

(4)過濾

過濾根據定義的標準過濾數據并返回數據的子集。filter()函數用于過濾數據。

filter = df.groupby('Team').filter(lambda x: len(x) >= 3)print (filter)

8.可視化

df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('2018/12/18',periods=10), columns=list('ABCD'))df.plot()
  • barbarh為條形
  • hist為直方圖
  • boxplot為盒型圖
  • area為“面積”
  • scatter為散點圖
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
import random
df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('2018/12/18',periods=10), columns=list('ABCD'))
df.plot()
plt.show()

輸出:

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
df.plot.bar()
plt.show()

輸出:

?

其余圖形類似上面的方法,各種圖形請參考Matplotlib官網,詳細介紹會在下一篇博客,請關注留言。

轉載于:https://www.cnblogs.com/qianshuixianyu/p/9255556.html

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

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

相關文章

JZOJ5857 【NOIP提高組模擬A組2018.9.8】沒有上司的舞會

題目 Description “那么真的有果爾德施坦因這樣一個人?”他問道。 “是啊,有這樣一個人,他還活著。至于在哪里,我就不知道了。” “那么那個密謀——那個組織?這是真的嗎?不是秘密警察的捏造吧?” “不是,這是真的。我們管…

python 中如何判斷list中是否包含某個元素

在python中可以通過in和not in關鍵字來判讀一個list中是否包含一個元素 theList [‘a’,’b’,’c’] if ‘a’ in theList: print ‘a in the list’ if ‘d’ not in theList: print ‘d is not in the list’

時間即財富:創業者浪費精力的八個錯誤

導讀:本文作者Jeff Miller是美食網頁應用Punchfork的創始人,同時也是DuckDuckGo、Ginzametrics、Art.sy、DataMinr以及Forkly的投資人。作者通過對自己創業初期一些錯誤選擇進行盤點,告訴讀者在創業初期應該學會選擇,因為在創業初…

寫給大數據開發初學者的話3

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 如果你已經按照《寫給大數據開發初學者的話2》中第三章和第四章的流程認真完整的走了一遍,那么你應該已經具備以下技能和知識…

十五周二次課

18.6 負載均衡集群介紹 主流開源軟件LVS、keepalived、haproxy、nginx等其中LVS屬于4層(網絡OSI 7層模型),nginx屬于7層,haproxy既可以認為是4層,也可以當做7層使用keepalived的負載均衡功能其實就是lvslvs這種4層的負…

LeetCode--171--Excel表列序號

問題描述: 給定一個Excel表格中的列名稱,返回其相應的列序號。 例如, A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 ...示例 1: 輸入: "A" 輸出: 1示例 2: 輸入: "AB" 輸出: 28示例 3: 輸入: "…

中國歷代王朝大排名

中國自秦以降,一共出過九個大王朝,它們是:秦、漢、晉、隋、唐、宋、元、明、清。另外,還出過五十幾個小王朝,它們是: 三國時的魏、蜀、吳,共三個; [ 轉自鐵血社區 http://bbs.tiexue…

寫給大數據開發初學者的話4

見:http://lxw1234.com/archives/2016/11/795.htm 如果你已經按照《寫給大數據開發初學者的話3》中第五章和第六章的流程認真完整的走了一遍,那么你應該已經具備以下技能和知識點: 為什么Spark比MapReduce快。使用SparkSQL代替Hive&#xff…

TPS及計算方法

TPS (transaction per second)代表每秒執行的事務數量,可基于測試周期內完成的事務數量計算得出。例如,用戶每分鐘執行6個事務,TPS為6 / 60s 0.10 TPS。同時我們會知道事務的響應時間(或節拍),以此例,60秒完成6個事務…

域名解析服務之DNS查詢類型

在實際應用中DNS查詢主要分為兩種方式查詢:1.遞歸查詢;2.迭代查詢 一般情況下:為了減少資源的消耗,網絡中客戶端與所屬的本地DNS服務器查詢方式通常為遞歸查詢,本地DNS服務器與外部的公共DNS服務器間的查詢方式為迭代查…

MFC Ribbon界面設計

Ribbon是類似于office2007樣式的界面,它替代了傳統的MFC程序里的菜單和工具欄 MFC默認生成的Ribbon功能少,需要我們自己添加一些控件和圖片等元素使界面好看 看下面的一個界面,是VC2010示例里的 看到它與默認Ribbon樣式的區別: 工…

互聯網手機躁動:“周大炮”追逐“雷布斯”

摘要:周鴻祎選擇非自有品牌補貼,可能是看到了小米初期的艱難,也想追求速度,繞開自制手機終端環節。于小米而言,需要解決后續機型承接、持續穩定提升產能;對360而言,需要投入巨量補貼資金&#x…

獲取泛型T的ClassT clazz

在我們搭建框架中往往會用到泛型,我們知道泛型的好處是在編譯的時候檢查類型安全&#xff0c;并且所有的強制轉換都是自動和隱式的&#xff0c;代碼的重用率高 然而有時候<method>的入參并不能直接強制轉換成泛型的類型,比如說下面這段代碼&#xff1a; 很明顯String 類…

寫給大數據開發初學者的話5

見&#xff1a;http://lxw1234.com/archives/2017/01/832.htm 至此&#xff0c;你的大數據平臺底層架構已經成型了&#xff0c;其中包括了數據采集、數據存儲與計算&#xff08;離線和實時&#xff09;、數據同步、任務調度與監控這幾大模塊。接下來是時候考慮如何更好的對外提…

3.spring boot Controller獲取請求參數的值

2019獨角獸企業重金招聘Python工程師標準>>> 1.獲取連接中的參數,使用倒的關鍵詞PathVariable RestController public class HelloController {RequestMapping(value "/hello/{id}",method RequestMethod.GET)public String index(PathVariable("i…

斷開的管道 java.io.IOException: Broken pipe 解決方法

斷開的管道 java.io.IOException: Broken pipe 解決方法一、Broken pipe產生原因分析1.當訪問某個服務突然服務器掛了&#xff0c;就會產生Broken pipe;2.客戶端讀取超時關閉了連接&#xff0c;這時服務器往客戶端再寫數據就發生了broken pipe異常&#xff01;二、方案1.問題一…

登錄與注冊

代碼如下 private void btn_login_Click(object sender, EventArgs e){SqlConnection sqlconnection new SqlConnection();sqlconnection.ConnectionString ConfigurationManager.ConnectionStrings["SQL"].ConnectionString;SqlCommand sqlcommand new SqlComman…

四大電商對壘價格戰:家電高庫存或是推手

摘要&#xff1a;[京東、蘇寧、國美、天貓等電商在家電領域的價格戰&#xff0c;更多是定價方家電廠商的倒逼]  “五一”期間&#xff0c;電商企業發起的價格戰硝煙仍未消散&#xff0c;如今戰火又起。一種較為普遍的看法是&#xff0c;此次價格戰&#xff0c;正是各家電商企…

三分鐘明白 Activiti工作流 -- java運用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、 什么是工作流 以請假為例&#xff0c;現在大多數公司的請假流程是這樣的 員工打電話&#xff08;或網聊&#xff09;向上級提出請…

linux命令 ps -ef 的含義

PS是LINUX下最常用的也是非常強大的進程查看命令//以下這條命令是檢查java 進程是否存在. ps -ef |grep java下面對命令選項進行說明&#xff1a;-e 顯示所有進程。-f 全格式。ps -e 列出程序時&#xff0c;顯示每個程序所使用的環境變量。ps -f 用ASCII字符顯示 樹狀結構 &…