百日筑基篇——Pandas學習三(pyhton入門八)

百日筑基篇——Pandas學習三(pyhton入門八)

文章目錄

  • 前言
  • 一、數據排序
  • 二、字符串處理
  • 三、數據合并方法
    • 1. merge方法
    • 2. concat方法
  • 四、分組數據統計
  • 五、數據重塑
    • 1. stack
    • 2. pivot
  • 總結


前言

上一篇文章介紹了一下pandas庫中的一些函數,而本章則繼續介紹庫中的函數在數據處理中的應用。

一、數據排序

運用sort_values方法,

import pandas as pdpath = r"C:\Users\王浩天\Desktop\beijing_tianqi_2018.csv"
df = pd.read_csv(path)
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype("int32")
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype("int32")print(df.head(4))
#Series的排序
print(df["bWendu"].sort_values(ascending=True,inplace=False))
#DataFrame的排序
df1 = df.sort_values(by=["aqiLevel","bWendu"],ascending=[True,False],inplace=False)
print(df1.head(6))ymd  bWendu  yWendu  tianqi fengxiang fengli  aqi aqiInfo  aqiLevel
178  2018-06-28      35      24    多云~晴        北風   1-2331
149  2018-05-30      33      18       晴        西風   1-2461
206  2018-07-26      33      25  多云~雷陣雨       東北風   1-2401
158  2018-06-08      32      19  多云~雷陣雨       西南風   1-2431
205  2018-07-25      32      25      多云        北風   1-2281
226  2018-08-15      32      24      多云       東北風   3-4331

在數據框的排序中,sort_values()函數的參數"by"用來指定根據排序的列名,“ascending” 參數則填布爾值或由布爾值形成的列表,用來指定是升序還是降序 ,且與"by"一一對應。

列如,在上述代碼中,是先根據"aqiLevel"升序排序,再在此基礎上按"bWendu"來降序排序。

二、字符串處理

使用 .str方法,獲取Series的str屬性,以便在屬性上調用所需函數。


#使用str的startswith 、contains 等得到bool的Series,可以用來做條件查詢
#例如,提取出六月份的數據
condition = df["ymd"].str.startswith("2018-06")
print(df.loc[condition,:])#多次str處理,只展示月份
df1["ymd"]=df1["ymd"].str.replace("-","").str[4:6]
print(df1.head(3))ymd  bWendu  yWendu  tianqi fengxiang fengli  aqi aqiInfo  aqiLevel
178  06      35      24    多云~晴        北風   1-2331
149  05      33      18       晴        西風   1-2461
206  07      33      25  多云~雷陣雨       東北風   1-2401#使用split對ymd進行拆分為列表
def func(df):year,month,day = df["ymd"].split("-")return f"{year}{month}{day}日"
df["日期"] = df.apply(func,axis=1)
print(df.head(3))ymd  bWendu  yWendu tianqi  ... aqi aqiInfo  aqiLevel           日期
0  2018-01-01       3      -6~多云  ...  592  201801011  2018-01-02       2      -5~多云  ...  491  201801022  2018-01-03       2      -5     多云  ...  281  20180103#若要將年月日去掉,可使用正則表達式
df["日期"]=df["日期"].str.replace("[年月日]","",regex = True)
print(df.head(2))

三、數據合并方法

1. merge方法

根據一列或多列的值將兩個DataFrame對象按行或列合并到一起


import pandas as pddf1 = pd.DataFrame({'學號': ['A0', 'A1', 'A2', 'A3'],'姓名': ['B0', 'B1', 'B2', 'B3'],'學生': ['K0', 'K1', 'K2', 'K3']})df2 = pd.DataFrame({'成績': ['C0', 'C1', 'C2', 'C3'],'導師': ['D0', 'D1', 'D2', 'D3'],'學生': ['K0', 'K1', 'K2', 'K3']})print(df1)
print(df2)
df_merge = pd.merge(df1,df2,on="學生")
print(df_merge)學號  姓名  學生  成績  導師
0  A0  B0  K0  C0  D0
1  A1  B1  K1  C1  D1
2  A2  B2  K2  C2  D2
3  A3  B3  K3  C3  D3

筆記如下:
在這里插入圖片描述

2. concat方法

用于按行或列將多個DataFrame對象連接到一起。它可以用于沿著行或列軸將DataFrame對象堆疊在一起

import pandas as pddf1 = pd.read_csv(r"D:\python\PycharmProjects\pythonProject1\pachou\result_dir\yaxibao0.csv",encoding="utf-8")
df2 = pd.read_csv(r"D:\python\PycharmProjects\pythonProject1\pachou\result_dir\yaxibao1.csv",encoding="utf-8")
df1 = pd.DataFrame(df1)
df2 = pd.DataFrame(df2)
#print(df1)
#print(df2)
DF= pd.concat([df1,df2],axis=0)  #默認按行合并
print(DF)AA_ID  yaxibao
0    LaggChr1G00000010.1     chlo
1    LaggChr1G00000020.1     cyto
2    LaggChr1G00000030.1     nucl
3    LaggChr1G00000040.1     nucl
4    LaggChr1G00000050.1     mito
..                   ...      ...
533  LaggChr1G00010360.1     nucl
534  LaggChr1G00010370.1     cyto
535  LaggChr1G00010380.1     cyto
536  LaggChr1G00010390.1     chlo
537  LaggChr1G00010400.1     plas[1040 rows x 2 columns]

筆記如下:

在這里插入圖片描述

四、分組數據統計

主要運用groupby方法,通常與agg()方法聯用。也可以自定義方法,并使用apply應用于數據框

import numpy as np
df["ymd"] = df["ymd"].str[:7]
print(df.head(3)ymd  bWendu  yWendu tianqi fengxiang fengli  aqi aqiInfo  aqiLevel
0  2018-01       3      -6~多云       東北風   1-2592
1  2018-01       2      -5~多云       東北風   1-2491
2  2018-01       2      -5     多云        北風   1-2281#可傳入多個分組依據列;as_index=False ,表示不使分組列變為索引,后面的agg函數,傳入字典可對不同的列使用指定的聚合方法
print(df.groupby(["fengxiang","ymd"],as_index=False).agg({"bWendu":np.max,"yWendu": np.min,"aqi": np.mean}))fengxiang      ymd  bWendu  yWendu         aqi
0        東北風  2018-01       3     -11   45.200000
1        東北風  2018-02      10      -4   45.000000
2        東北風  2018-03      15      -4  141.666667
3        東北風  2018-04      19       1   56.200000
4        東北風  2018-05      25      13  121.000000
..       ...      ...     ...     ...         ...
68       西南風  2018-12       2      -8   78.000000
69        西風  2018-02       8      -4   78.000000
70        西風  2018-05      33      10   74.500000
71        西風  2018-07      27      23   28.000000
72        西風  2018-10      21       7   77.000000df4 = df[["ymd","bWendu","yWendu","aqi","aqiLevel"]]
print(df4.groupby("ymd").agg([np.sum,np.mean,np.std]))
print(df4.groupby("ymd").agg({"bWendu":np.max,"yWendu": np.min,"aqi": np.mean}))#使用自定義方法
def guiyihua(df):df["bWendu_new"] = df["bWendu"].apply(lambda x: (x - df["bWendu"].min())/ (df["bWendu"].max() - df["bWendu"].min()))return df
print(df.groupby("ymd").apply(guiyihua))

五、數據重塑

這里是引用

1. stack

stack函數用于將數據框的列轉換為行,從而生成一個新的數據框
它會將數據框的列標簽轉換為新的索引層級,并將對應的值放入新的列中。這個過程被稱為"堆疊"
unstack是與stack相反的操作,用于將行索引轉換為列。

#print(df.dtypes)
df["ymd"] = pd.to_datetime(df["ymd"])
#print(df.dtypes)
#根據月份分組
df_group = df.groupby([df["ymd"].dt.month,"fengxiang"])["bWendu"].agg(pv = np.max)
print(df_group)pv
ymd fengxiang    
1   東北風         3東南風         2東風          3北風          2南風          7
...            ..
11  西南風        14
12  東北風         9東南風         7西北風        10西南風         2[73 rows x 1 columns]#將行索引轉化為列
df_stack = df_group.unstack()
print(df_stack)pv                                          
fengxiang   東北風   東南風    東風    北風    南風   西北風   西南風    西風
ymd                                                      
1           3.0   2.0   3.0   2.0   7.0   6.0   5.0   NaN
2          10.0   NaN   7.0   6.0   8.0   5.0  12.0   8.0
3          15.0  14.0  25.0  18.0  27.0   NaN  25.0   NaN
4          19.0  26.0   NaN  26.0  30.0  26.0  27.0   NaN
5          25.0  28.0  29.0  25.0  35.0  31.0  32.0  33.0
6          37.0  37.0  36.0  35.0  37.0   NaN  38.0   NaN
7          33.0  37.0  32.0  32.0  35.0   NaN  35.0  27.0
8          32.0  35.0  35.0  32.0  36.0   NaN  28.0   NaN
9           NaN   NaN   NaN  30.0  29.0  27.0  31.0   NaN
10         17.0   NaN   NaN  25.0  25.0  24.0  19.0  21.0
11          8.0  13.0   NaN  15.0  18.0  11.0  14.0   NaN
12          9.0   7.0   NaN   NaN   NaN  10.0   2.0   NaN#將列索引轉換為行
ymd  fengxiang    
1    東北風        pv     3東南風        pv     2東風         pv     3北風         pv     2南風         pv     7..
11   西南風        pv    14
12   東北風        pv     9東南風        pv     7西北風        pv    10西南風        pv     2
Length: 73, dtype: int32

2. pivot

pivot函數會重新安排數據框的行和列,使之對應于新的行和列標簽。這個過程被稱為"旋轉"


import pandas as pd# 創建一個簡單的數據框
data = {'Name': ['wht', 'xingshi'],'Subject': 'Maths','Score': [90, 85]}
df = pd.DataFrame(data)
print(df)Name Subject  Score
0      wht   Maths     90
1  xingshi   Maths     85# 使用pivot函數進行數據重塑
pivoted_df = df.pivot(index='Name', columns='Subject', values='Score')# 打印重塑后的數據框
print(pivoted_df)
Subject  Maths
Name          
wht         90
xingshi     85

總結

本章主要總結了有關pandas庫中的一些函數,有排序函數sort_values; 數據合并函數merge、concat;分組統計函數groupby;以及數據重塑函數stack、pivot。

子非魚,安知魚之樂;

–2023-8-14 筑基篇

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

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

相關文章

MySQL數據類型

文章目錄 MySQL數據類型1. 數據類型分類2. 數值類型2.1 tinyint類型2.2 bit類型2.3 小數類型2.3.1 float2.3.2 decimal 2.4 字符串類型2.4.1 char2.4.2 varchar2.4.3 char和varchar比較 2.5 日期和時間類型2.6 enum和set MySQL數據類型 1. 數據類型分類 紅色標注是我主要講解…

【QT】 QFileQFileInfo文件操作

很高興在雪易的CSDN遇見你 ,給你糖糖 歡迎大家加入雪易社區-CSDN社區云 前言 本文分享QT對文件的操作技術,希望對各位小伙伴有所幫助! 感謝各位小伙伴的點贊關注,小易會繼續努力分享,一起進步! 你的點…

linux中profile.d和profile的區別

profile.d在profile中加載 profile文件 PATH"/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/scripts:/soc/bin:/soc/scripts" LD_LIBRARY_PATH"/usr/local/lib:/usr/lib:/opt/lib:/soc/lib" export SSL_LDPATH/usr/local/lib/ export ZLIB_LDPATH/usr/lo…

appium默認60秒關閉應用的問題

問題:appium默認啟動一個應用的session過期時間是60秒到時間會自動停了剛啟動的應用,工作臺打印:info: [debug] We shut down because no new commands came in的日志 分析:--command-timeout 60 The default command timeout fo…

商城-學習整理-高級-全文檢索-ES(九)

目錄 一、ES簡介1、網址2、基本概念1、Index(索引)2、Type(類型)3、Document(文檔)4、倒排索引機制4.1 正向索引和倒排索引4.2 正向索引4.3 倒排索引 3、相關軟件及下載地址3.1 Kibana簡介3.2 logstash簡介…

【C++深入淺出】初識C++上篇(關鍵字,命名空間,輸入輸出,缺省參數,函數重載)

目錄 一. 前言 二. 什么是C 三. C關鍵字初探 四. 命名空間 4.1 為什么要引入命名空間 4.2 命名空間的定義 4.3 命名空間使用 五. C的輸入輸出 六. 缺省參數 6.1 缺省參數的概念 6.2 缺省參數的分類 七. 函數重載 7.1 函數重載的概念 7.2 函數重載的條件 7.3 C支…

ChatGPT在智能家居控制和環境管理中的應用如何?

智能家居控制和環境管理是近年來在科技領域迅速發展的重要領域之一。智能家居技術通過將物聯網、人工智能和自動化技術相結合,實現了家居設備的智能化、自動化控制和遠程管理。ChatGPT作為強大的自然語言處理模型,在智能家居控制和環境管理方面具有廣泛的…

軟件測試項目實戰,電商業務功能測試點匯總(全覆蓋)

目錄:導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結(尾部小驚喜) 前言 支付功能怎么測試…

Spring--BeanFactory和FactoryBean區別

BeanFactory 和 FactoryBean 是 Spring 框架中兩個不同的概念,它們在對象的管理和創建過程中具有不同的角色和功能。下面是它們之間的區別: BeanFactory: BeanFactory 是 Spring 框架的核心接口之一,它是一個對象容器&#xff0c…

C語言刷題訓練【第11天】

大家好,我是紀寧。 今天是C語言筆試刷題訓練的第11天,加油! 文章目錄 1、聲明以下變量,則表達式: ch/i (f*d – i) 的結果類型為( )2、關于代碼的說法正確的是( )3、已知有如下各變…

使用 Visual Studio GoogleTest編寫 C/C++ 單元測試——入門篇

入門教程 Visual Studio 新建 GoogleTest項目,一路選默認參數 pch.h #pragma once#include "gtest/gtest.h"int add(int a, int b);pch.cpp #include "pch.h"int add(int a, int b) {return a b; }test.cpp #include "pch.h"TES…

【廣州華銳視點】AR電力職業技能培訓系統讓技能學習更“智慧”

隨著科技的發展,教育方式也在不斷地進步和創新。其中,增強現實(AR)技術的出現,為教育領域帶來了全新的可能。AR電力職業技能培訓系統就是這種創新教學方法的完美實踐,它將虛擬與現實相結合,為學生提供了一個沉浸式的學…

【數據庫】Sql Server可視化工具SSMS條件和SQL窗格以及版本信息

2023年,第34周,第1篇文章。給自己一個目標,然后堅持總會有收貨,不信你試試! SQL SERVER 官方本身就有數據庫可視化管理工具SSMS,所以大部分都會使用SSMS。以前版本是直接捆綁, 安裝完成就自帶有…

Python多線程與線程池(python線程池ThreadPoolExecutor)concurrent.futures高級別異步執行封裝

文章目錄 Python多線程與線程池一、Python多線程1.1 線程簡介1.2 Python中的多線程1.3 GIL限制 二、線程池2.1 Python中的線程池 三、代碼分析四、參考資料 Python多線程與線程池 一、Python多線程 在進行復雜的計算或處理大量數據時,可以通過創建多個線程來同時執…

Sentinel規則持久化

首先 Sentinel 控制臺通過 API 將規則推送至客戶端并更新到內存中,接著注冊的寫數據源會將新的規則保存到本地的文件中。 示例代碼: 1.編寫處理類 //規則持久化 public class FilePersistence implements InitFunc {Value("spring.application:n…

云原生k8s---資源限制、探針

目錄 一:資源限制 1、資源限制原因 2、Pod 和 容器 的資源請求和限制 3、CPU 資源單位 4、內存 資源單位 5、事例 (1)事例一 (2)事例二 二:重啟策略 1、重啟策略模式 2、事例 三:探針…

Win10提醒事項如何打開?電腦上如何添加日程提醒?

有不少上班族表示自己在日常辦公時,經常會忘記一些重要的事情,例如領導安排給自己的任務、會議安排、項目截止日期等。為了避免自己忘記工作事項,很多人都想要在電腦上設置提醒事項或添加日程提醒。那么Win10提醒事項如何打開呢?P…

Golang 中的 archive/zip 包詳解(一):實現 ZIP 壓縮與解壓

Golang 中的 archive/zip 包用于處理 ZIP 格式的壓縮文件,提供了一系列用于創建、讀取和解壓縮 ZIP 格式文件的函數和類型,使用起來非常方便。 實現壓縮功能 1、首先需要創建一個 zip 文件。 zip 文件也是一個文件,首先需要創建一個基礎的…

[Leetcode] [Tutorial] 多維動態規劃(未完待續)

文章目錄 62. 不同路徑Solution 62. 不同路徑 一個機器人位于一個 m ? * ? n 網格的左上角 (起始點在下圖中標記為 “Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角。 問總共有多少條不同的路徑? 示例…

【electron】electron項目創建的方式:

文章目錄 【1】npm init quick-start/electron(推薦)【2】 克隆倉庫,快速啟動【3】 通過腳手架搭建項目【4】 手動創建項目 【Electron官網】https://www.electronjs.org/zh/docs/latest/api/app 【1】npm init quick-start/electron&#xf…