Pandas簡易入門(一)

来源:http://www.cnblogs.com/kylinlin/archive/2016/02/29/5226790.html
-Advertisement-
Play Games

目錄: 讀取數據 索引 選擇數據 簡單運算 聲明,本文引用於:https://www.dataquest.io/mission/8/introduction-to-pandas (建議閱讀原文) Pandas使用一個二維的數據結構DataFrame來表示表格式的數據,相比較於Numpy,Pandas...


目錄:

    讀取數據

    索引

    選擇數據

    簡單運算

 

 

聲明,本文引用於:https://www.dataquest.io/mission/8/introduction-to-pandas (建議閱讀原文)

Pandas使用一個二維的數據結構DataFrame來表示表格式的數據,相比較於Numpy,Pandas可以存儲混合的數據結構,同時使用NaN來表示缺失的數據,而不用像Numpy一樣要手工處理缺失的數據,並且Pandas使用軸標簽來表示行和列

 

讀取數據

Pandas使用函數read_csv()來讀取csv文件

import pandas

food_info = pandas.read_csv('food_info.csv')

print(type(food_info))
# 輸出:<class 'pandas.core.frame.DataFrame'> 可見讀取後變成一個DataFrame變數

 

該文件的內容如下:

圖片3

 

使用函數head( m )來讀取前m條數據,如果沒有參數m,預設讀取前五條數據

first_rows = food_info.head()

first_rows = food_info.head(3)

由於DataFrame包含了很多的行和列,Pandas使用省略號(...)來代替顯示全部的行和列,可以使用colums屬性來顯示全部的列名

print(food_info.columns)

# 輸出:輸出全部的列名,而不是用省略號代替

Index(['NDB_No', 'Shrt_Desc', 'Water_(g)', 'Energ_Kcal', 'Protein_(g)', 'Lipid_Tot_(g)', 'Ash_(g)', 'Carbohydrt_(g)', 'Fiber_TD_(g)', 'Sugar_Tot_(g)', 'Calcium_(mg)', 'Iron_(mg)', 'Magnesium_(mg)', 'Phosphorus_(mg)', 'Potassium_(mg)', 'Sodium_(mg)', 'Zinc_(mg)', 'Copper_(mg)', 'Manganese_(mg)', 'Selenium_(mcg)', 'Vit_C_(mg)', 'Thiamin_(mg)', 'Riboflavin_(mg)', 'Niacin_(mg)', 'Vit_B6_(mg)', 'Vit_B12_(mcg)', 'Vit_A_IU', 'Vit_A_RAE', 'Vit_E_(mg)', 'Vit_D_mcg', 'Vit_D_IU', 'Vit_K_(mcg)', 'FA_Sat_(g)', 'FA_Mono_(g)', 'FA_Poly_(g)', 'Cholestrl_(mg)'], dtype='object')

可以使用tolist()函數轉化為list

food_info.columns.tolist()

與Numpy一樣,用shape屬性來顯示數據的格式

dimensions = food_info.shape

print(dimensions)
輸出:(8618,36) 表示這個表格有8618行和36列的數據,其中dimensions[0]為8618,dimensions[1]為36

 

與Numpy一樣,用dtype屬性來顯示數據類型,Pandas主要有以下幾種dtype:

  • object -- 代表了字元串類型
  • int -- 代表了整型
  • float -- 代表了浮點數類型
  • datetime -- 代表了時間類型
  • bool -- 代表了布爾類型

 

當讀取了一個文件之後,Pandas會通過分析值來推測每一列的數據類型

print(food_info.dtypes)

輸出:每一列對應的數據類型

NDB_No            int64

Shrt_Desc           object

Water_(g)           float64

Energ_Kcal          int64

Protein_(g)          float64

...

 

索引

讀取了文件後,Pandas會把文件的一行作為列的索引標簽,使用行數字作為行的索引標簽

圖片4

註意,行標簽是從數字0開始的

Pandas使用Series數據結構來表示一行或一列的數據,類似於Numpy使用向量來表示數據。Numpy只能使用數字來索引,而Series可以使用非數字來索引數據,當你選擇返回一行數據的時候,Series並不僅僅返回該行的數據,同時還有每一列的標簽的名字。

譬如要返迴文件的第一行數據,Numpy就會返回一個列表(但你可能不知道每一個數字究竟代表了什麼)

圖片5

而Pandas則會同時把每一列的標簽名返回(此時就很清楚數據的意思了)

圖片6

 

選擇數據

Pandas使用loc[]方法來選擇行的數據

# 選擇單行數據:

food_info.loc[0]   # 選擇行標號為0的數據,即第一行數據

food_info.loc[6]   # 選擇行標號為6的數據,即第七行數據

# 選擇多行數據:

food_info.loc[3:6] # 使用了切片,註意:由於這裡使用loc[]函數,所以返回的是行標號為3,4,5,6的數據,與python的切片不同的是這裡會返回最後的標號代表的數據,但也可以使用python的切片方法:

food_info[3:7]

food_info.loc[[2,5,10]] # 返回行標號為2,5,10三行數據

練習:返迴文件的最後五行

方法一:

length = food_info.shape[0]

last_rows = food_info.loc[length-5:length-1]

方法二:

num_rows = food_info.shape[0]

last_rows = food_info[num_rows-5:num_rows]

Pandas直接把列名稱填充就能返回該列的數據

ndb_col = food_info["NDB_No"] # 返回列名稱為NDB_No的那一列的數據

zinc_copper = food_info[["Zinc_(mg)", "Copper_(mg)"]] # 返回兩列數據

 

簡單運算

現在要按照如下公式計算所有食物的健康程度,並按照降序的方式排列結果:

Score=2×(Protein_(g))−0.75×(Lipid_Tot_(g))

對DataFrame中的某一列數據進行算術運算,其實是對該列中的所有元素進行逐一的運算,譬如:

water_energy = food_info["Water_(g)"] * food_info["Energ_Kcal"]

原理:

圖片7

由於每一列的數據跨度太大,有的數據是從0到100000,而有的數據是從0到10,所以為了儘量減少數據尺度對運算結果的影響,採取最簡單的方法來規範化數據,那就是將每個數值都除以該列的最大值,從而使所有數據都處於0和1之間。其中max()函數用來獲取該列的最大值

food_info['Normalized_Protein'] = food_info['Protein_(g)'] / food_info['Protein_(g)'].max()

food_info['Normalized_Fat'] = food_info['Lipid_Tot_(g)'] / food_info['Lipid_Tot_(g)'].max()

food_info['Norm_Nutr_Index'] = food_info["Normalized_Protein"] * 2 - food_info["Normalized_Fat"] * 0.75

註意:上面的兩個語句已經在原來的DataFrame中添加了三列,列名分別為Normalized_Protein和Normalized_Fat,Norm_Nutr_Index。只需要使用中括弧和賦值符就能添加新列,類似於字典

對DataFrame的某一列數據排序,只需要使用函數sort()即可

food_info.sort("Sodium_(mg)") # 函數參數為列名,預設是按照升序排序,同時返回一個新的DataFrame

food_info.sort("Norm_Nutr_Index", inplace=True, ascending=False ) # 通過inplace參數來控制在原表排序,而不是返回一個新的對象;ascending參數用來控制是否升序排序

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文目錄列表: 1、SQL Server中的基準日期 2、smalldatetime的日期範圍 3、smalldatetime的日期範圍和無符號2位元組整數的關係 4、總結語 5、參考清單列表 SQL Server中的基準日期 SQL Server 中針對datetime和smalldatetime這
  • 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7
  • hiredis 是 redis 的client端C語言 lib, hiredis擁有同步和非同步的API, 非同步API的實現有多種方法,分別依賴libev, libevent, libuv, ae等等,其中ae是redis內部實現的一個非同步事件處理模塊。 稍微修改了hiredis的example-ae
  • 寫完DML語句(update, insert, delete)後,需要手動COMMIT,如果沒有COMMIT,更新的內容會被保存到記憶體中,而不是提交到資料庫中,將不會被其他Session(對話)看見。其他對話看到的是更新前的數據。當用戶退出對話時,Oracle才會自動Commit。 而DDL語句(c
  • 一、 Redis常用數據類型 Redis最為常用的數據類型主要有以下: String Hash List Set Sorted set 一張圖說明問題的本質 圖一: 圖二: 代碼: /* Object types */ #define REDIS_STRING 0 #define REDIS_LIS
  • MySQL中的註釋 MySQL中的註釋有三種: # 註釋內容 -- 註釋內容 /* 註釋內容*/ 但是,在導出的SQL文件中,也會看到類似如下內容的註釋: 1 CREATE DATABASE `blog` /*!40100 DEFAULT CHARACTER SET latin1 */; 其中的 /
  • 安裝依賴: CentOS: # yum -y install wget gcc-c++ cmake make bison ncurses-devel perl unzip Ubuntu:(使用ubuntu下麵有不少需要root許可權,請註意) 複製代碼 代碼如下: # sudo apt-get ins
  • 多表通用的SQL存儲過程分頁 USE [EmailCenter] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Script Date: 2016/2/29 11:00:19 ******/ SET ANSI_NULLS ON
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...