Pandas 常用操作

来源:https://www.cnblogs.com/lmq886/archive/2023/03/19/17232918.html
-Advertisement-
Play Games

Pandas庫專為數據分析而設計,它是使Python成為強大而高效的數據分析環境的重要因素。 一、Pandas數據結構 1、import pandas as pd import numpy as np import matplotlib.pyplot as plt 2、S1=pd.Series([‘ ...


 

Pandas庫專為數據分析而設計,它是使Python成為強大而高效的數據分析環境的重要因素。

一、Pandas數據結構

1、import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

2、S1=pd.Series([‘a’,’b’,’c’]) series是一組數據與一組索引(行索引)組成的數據結構

3、S1=pd.Series([‘a’,’b’,’c’],index=(1,3,4)) 指定索引

4、S1=pd.Series({1:‘a’,2:’b’,3:’c’}) 用字典形式指定索引

5、S1.index() 返回索引

6、S1.values() 返回值

7、Df=pd.DataFrame([‘a’,’b’,’c’]) dataframe是一組數據與兩組索引(行列索引)組成的數據結構

8、Df=pd.DataFrame([[a,A],[b,B],[c,C]],columns=[‘小寫’,’大寫’],index=[‘一’,’二’,’三’])

Columms 為列索引,index為行索引

9、pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider 清華鏡像

10、data={‘小寫’:[‘a’,’b’,’c’],’大寫’:[‘A’,’B’,’C’]} 傳入字典

Df=Pd.DataFrame(data)

11、Df.index() df.columns()

二、讀取數據

12、df=pd.read_excel(r’C:\user\...xlsx’,sheet_name=’sheet1’) 或

Pd.read_excel(r’C:\user\...xlsx’,sheet_name=0) 讀取excel表

13、Pd.read_excel(r’C:\user\...xlsx’,index_col=0,header=0)

index_col指定行索引,header指定列索引

14、pd.read_excel(r’C:\user\...xlsx’,usecols=[0,1]) 導入指定列,不能有index_col和header

15、pd.read_tablel(r’C:\user\...txt’,sep=’ ’) 導入txt文件,sep指定分隔符是什麼

16、df.head(2) 展示前兩行,預設展示前5行

17、df.shape 顯示數據幾行幾列,不包含行和列索引

18、http://df.info() 可查看表中數據的類型

19、df.describe() 可獲得表中數值類型指端的分佈值(和、平均值、方差等)

三、數據預處理

20、df.info() 可顯示表中哪個數據為空

21、df.isnull() 方法可以判斷哪個值是缺失值,如果缺失返回True,否則為False

22、df.dropna() 預設刪除含缺失值的行

23、df.dropna(how=’all’) 刪除全為空值的行,不全為空值的行不會刪除

24、df.fillna(0) 用0填充所有空值

25、df.fillna({‘性別’:’男’,’年齡’:’30’}) 對性別列中空值填充男,年齡填充30

26、df.drop_duplicates() 預設對所有值進行重覆值檢查,保留第一行的值

27、df.drop_duplicates(subset=’性別’) 對性別列中重覆值查詢保留第一行

28、df.drop_duplicates(subset=[’性別’,’公司’],keep=’last’) 對性別和公司兩列查重

keep設置預設為first(保留第一個),可設置為last(保留最後一個) 或False(不部不保留)

29、df[‘ID’].dtype 查看ID列的數據類型

30、df[‘ID’].astype(‘float’) 將ID列的數據類型轉換為float類型

31、數據類型:int、float、object、string、unicode、datetime

32、df[‘ID’][1] ID列的第二個數據

33、df.columns=[‘大寫’,’小寫’,’中文’] 為無索引表添加列索引

34、df.index=[1,2,3] 添加行索引

35、df.set_index(‘編號’) 指明要用的列作為行索列

36、df.rename(index={‘訂單編號’:’新訂單編號’,’客戶姓名’:’新客戶姓名’}) 對行索引進行重新命名

37、df.rename(columns={1:’一’,2:’二’}) 對列索引進行重新命名

38、df.reset_index() 預設將全部index轉化為column

39、df.reset_index(level=0) 將0級索引轉化為column

40、df.reset_index(drop=True) 刪除原有索引

四、數據選擇

41、df[[‘ID’,’姓名’]] 多個列名要裝入list

42、df.iloc[[1,3],[2,4]] 用行列編號選擇數據

43、df.iloc[1,1] 選取表中的第3行2列數據,第一行預設為列索引

44、df.iloc[:,0:4] #獲取第1列到第4列的值

45、df.loc[‘一’] #loc用行名選取的行數據,格式是Series,但可以用列表形式訪問

46、df.loc[‘一’][0] 或 df.loc[‘一’][‘序號’]

47、df.iloc[1]#iloc用行編號選取行數據

48、df.iloc[[1,3]]#多行編號選取行數據,要用list封裝,不然變成行列選取

49、df.iloc[1:3]#選擇第二行和第四行

50、df[df[‘年齡’]<45] #加判斷條件返回符合條件的全部數據,不局限年齡列

51、df[(df[‘年齡’]<45)&(df[‘ID’]<4)] #判斷多條件選擇數據

52、df.iloc[[1,3],[2,4]] 相當於df.loc[[‘一’,’二’],[‘年齡’,’ID’]] #loc是名,iloc是編號

53、df[df[‘年齡’]<45][[‘年齡’,’ID’]]#先通過年齡條件選擇行,再通過不同索引指定列

54、df.iloc[1:3,2:4]#切片索引

五、數值操作

55、df[‘年齡’].replace(100,33)#對年齡列中的100替換成33

56、df.replace(np.NaN,0)#相當於fillna(),其中np.NaN是python中預設值的表示方式

57、df.replace([A,B],C)#多對一替換,A、B替換成C

58、df.replace({‘A’:’a’,‘B’:’b’,‘C’:’c’})#多對多替換

59、df.sort_values(by=[&apos;申請單編號&apos;],ascending=False)#申請單編號列降序排列,Ture升序排列(預設)

60、df.sort_values(by=[&apos;申請單編號&apos;],na_position=’first’)#申請單編號列升序排列,缺失值排在第一位

預設缺失值在最後一位last

61、df.sort_values(by=[&apos;col1&apos;,’col2’],ascending=[False,True])#多列排序

62、df[‘銷量’].rank(method=’first’)#銷量排名(不是排序),method有first\min\max\average

63、df.drop([‘銷量’,’ID’],axis=1)#刪除列,直接是列名

64、df.drop(df.columns[[4,5]],axis=1)#刪除列,是編號

65、df.drop(colums=[‘銷量’,’ID’])#此種方式刪除列,可以不寫axis=1

66、df.drop([‘a’,’b’],axis=0)#刪除行,直接是列名

67、df.drop(df.index[[4,5]],axis=0)#刪除行,是編號

68、df.drop(index=[‘a’,’b’])#此種方式刪除行,可以不寫axis=0

69、df[‘ID’].value_counts()#對ID列中數據出現的次數進行統計

70、df[‘ID’].value_counts(normalize=Ture,sort=False)#對ID列中數據出現的次數占比進行統計,並降序排序

71、df[‘ID’].unique()#獲取列的唯一值

72、df[‘年齡’].isin([‘a’,11])#查看這列中是否包含a或11

73、pd.cut(df[‘ID’],bins=[0,3,6,10])#用bins指明切分區間

74、pd.qcut(df[‘ID’],3)#ID列切分成3個部分,每部分數據個數儘量一致

75、df.insert(2,’商品’,[‘書’,’筆’,’計算器’])#插入第三列

76、df[’商品’]=[‘書’,’筆’,’計算器’])#插新列,在表的最後面

77、df.T行列互換

78、df.tack()#把表格型數據轉化成樹形數據

79、df.set_index([‘ID’,’姓名’]).stack().reset_index()#寬表轉換成長表,先將共同列設置成行索引,再對其他列

進行轉化成樹形數據,再重置行索引

80、df.melt(id_vars=[‘ID’,’姓名’],var_name=’year’,value_name=’sale’)#id_var參數指明寬表轉換成長表時保持不

變的列,var_name參數表示原來的列索引轉化為行索引對應的列名,value_name表示新索引對應值的列名

81、df[‘C1’].apply(lambda x:x+1)#相當於map(),只是需要和lambda配合

82、df.applymap(lambda x:x+1),對錶中的所有數據執行相同函數運算

六、數據運算

83、df[‘ID’]+Df[‘ID’]#可進行加減乘除

84、df[‘ID’]>Df[‘ID’]#可進行> < == !=等比較運算

85、df.count()#統計每列的非空值的個數

86、df.count(axis=1)#統計每行的非空值的個數

87、df[‘ID’].count()#統計指定列的非空值的個數

88、df.sum(axis=1)#每列/行求和結果

89、df.mean(axis=1)#每列/行求均值

90、df.max(axis=1)#每列/行求最大值

91、df.min(axis=1)#每列/行求最小值

92、df.median(axis=1)#每列/行求中間值

93、df.mode(axis=1)#每列/行中出現最多的值

94、df.var(axis=1)#每列/行求方差

95、df.std(axis=1)#每列/行求標準差

96、df.quantile(0.25)#求1/4分位數,可以0.5、0.75等分位數

97、df.corr()#求整個DataFrame表中的相關性

七、時間序列

98、from datetime import datetime

99、datatime.now()#返回現在的時間年月日時分秒

100、datatime.now().year#返回年,可以.month\.day

101、datatime.now().weekday()-1#返回周幾

102、datatime.now().isocalendar()#返回周數

103、 (2018,41,7)#2018年的第41周第7天

104、datatime.now().date()#只返回年月日

105、datatime.now().time()#只返回時間

106、datatime.now().strftime(‘%Y-%m-%d %H:%M:%S’)#返回2020-03-13 09:09:12

107、from dateutil.parer import parse

108、 parse(str_time)#將字元串的時間轉化成為時間格式

109、pd.Datetimeindex([‘2020-02-03’,2020-03-05’])#設置時間索引

110、data[‘2018’]#獲取2018年的數據

111、data[‘2018-01’]#獲取2018年1月的數據

112、data[‘2018-01-05’:‘2018-01-15’]#獲取這個時段的數據

113、非時間索引的表格處理

114、df[df[‘成交時間’]==datetime(2018,08,05)]

115、df[df[‘成交時間’]>datetime(2018,08,05)]

116、df[(df[‘成交時間’]>datetime(2018,08,05))&(df[‘成交時間’] <datetime(2018,08,15))]

117、cha=datatime(2018,5,21,19,50)-datatime(2018,5,18,17,50)

118、 cha.days#返回天的時間差

119、 cha.seconds#返回秒的時間差

120、 cha.seconds/3600#返回小時的時間差

121、datatime(2018,5,21,19,50)+timedelta(days=1)#往後移一天

122、datatime(2018,5,21,19,50)+timedelta(seconds=20)#往後移20秒

123、datatime(2018,5,21,19,50)-timedelta(days=1)#往前移一天

八、數據透視表

124、df.groupby(‘客戶分類’).count()#客戶分類後求數運算

125、df.groupby(‘客戶分類’).sum()#客戶分類後求和運算

126、df.groupby(‘客戶分類’,’區域分類’).sum()#多列分類後求和運算

127、df.groupby(‘客戶分類’,’區域分類’)[‘ID’].sum()#多列分類後ID求和運算

128、df[‘ID’]#DataFrame取出一列就是Series類型

129、df.groupby(df[‘ID’]).sum() 相當於 df.groupby(‘ID’).sum()

130、df.groupby(‘客戶分類’).aggregate([‘sum’,’count’]# aggregate可實現多種彙總方式

131、df.groupby(‘客戶分類’).aggregate({‘ID’:‘count’,’銷量’: ‘sum’})

132、# aggregate可針對不同列做不同的彙總運算

133、df.groupby(‘客戶分類’).sum().reset_index()#分組彙總後再重置索引,變為標準DataFrame

134、pd.pivot_table(data,values,index,columms,aggfunc,fill_value,margins,dropna,margins_name)

135、數據透視表,data:數據表df,values:值,index:行索引,columns:列索引,aggfunc:values的計算類型,fill_value:對空值的填充方式;margins:是否有合計列;margins_name:合計列的列名

136、pd.pivot_table(df,values=[’ID’,‘銷量’],index=’客戶分類’,columms=‘區域’,aggfunc={‘ID’:‘count’,’銷量’:‘sum’}),fill_value=0,margins=Ture,dropna=None,margins_name=’總計’)

九、多表格拼接

137、pd.merge(df1,df2)#預設自動尋找兩個表中的公共列進行拼接

138、pd.merge(df1,df2,on=“學號“)#on來指定連接列,連接列要是公共列

139、pd.merge(df1,df2,on=[‘學號’,’姓名’]#on來指定連接列,連接列要是公共列

140、pd.merge(df1,df2,left_on=‘學號’right_on=’編號’) #由公共列,但類名不同時用左右鍵指定

141、pd.merge(df1,df2,left_index=‘學號’right_index=’編號’)#兩表公共列都是索引列時

142、pd.merge(df1,df2,left_index=‘學號’right_on=’編號’)#公共列一個時索引列一個時普通列

143、pd.merge(df1,df2,on=’學號’,how=’inner’)#返回公共列中對應的公共值拼接(內連接)

144、pd.merge(df1,df2,on=’學號’,how=’left’)#返回公共列中對應的左表值(左連接)

145、pd.merge(df1,df2,on=’學號’,how=’right’)#返回公共列中對應的右表值(右連接)

146、pd.merge(df1,df2,on=’學號’,how=’outer’)#返回公共列中對應的所有值(外連接)

147、pd.concat([df1,df2])#兩個結構相同的表縱向連接,保留原索引值

148、pd.concat([df1,df2],ignore_index=True)#兩個結構相同的表縱向連接,重新設置索引值

149、pd.concat([df1,df2],ignore_index=True).drop_duplicates()#拼接後去掉重覆值

十、導出文件

150、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測試.xlsx’)#導出文件格式.xlsx用to_excel方法,通過excel_writer參數來實現

151、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測試.xlsx’,sheet_name=’文檔’)

152、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測試.xlsx’,sheet_name=’文檔’,index=False)#導出是去掉索引

153、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測試.xlsx’,sheet_name=’文檔’,index=False,columns=[‘ID’,’銷量’,‘姓名’])#設置導出的列

154、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測試.xlsx’,sheet_name=’文檔’,index=False,columns=[‘ID’,’銷量’,‘姓名’],encoding=’utf-8’)#設置導出的列

155、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測試.xlsx’,sheet_name=’文檔’,index=False,columns=[‘ID’,’銷量’,‘姓名’],encoding=’utf-8’,na_rep=0)#缺失值填充

156、writer=pd.ExcelWriter(excelpath,engine=’xlsxwirter’)#導出多個文件至一個文件的多個sheet

157、df1.to_excel(writer,sheet_name=‘表一’)

158、df2.to_excel(writer,sheet_name=’表二’)

159、writer.save()


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

-Advertisement-
Play Games
更多相關文章
  • 這篇文章記錄了Collection集合,List集合,Set集合 在文章第七點總結了兩大系列集合的五種實現類的區別,有需要的小伙伴可以直接去查看 一、什麼是集合 集合是Java中存儲對象數據的一種容器 二、集合有什麼特點 大小不固定,類型也可以不固定(通常需要泛型約束) 集合只能存儲引用數據類型 集 ...
  • JAVA -01 前期準備 介紹 1972年C誕生【兩大問題:指針;記憶體管理】 1982年C++誕生【面向對象;相容C;圖形領域和游戲,但是更複雜】 1995年JAVA誕生【沒有指針沒有記憶體管理;面向對象;類型安全;高質量類庫;跨平臺(JVM實現);applet圖形界面程式】 小碎點 三高問題:高可 ...
  • 去年公司由於不斷發展,內部自研系統越來越多,所以後來搭建了一個日誌收集平臺,並將日誌收集功能以二方包形式引入自研系統,避免每個自研系統都要建立一套自己的日誌模塊,節約了開發時間,管理起來也更加容易。 這篇文章主要介紹ELK最新版本的搭建,二方包的介紹可以看小霸王的另外一篇文章。 ...
  • SpringBoot接收參數相關註解 1.基本介紹 SpringBoot接收客戶端提交數據/參數會使用到相關註解 詳解@PathVariable、@RequestHeader、@ModelAttribute、@RequestParam、@CookieValue、@RequestBody 2.接參數相 ...
  • 前言 緣起 實驗室的學弟問我為什麼他使用nvcc命令報錯,起先我以為他用的是老師給的root賬戶,按照參考文獻1便可以解決問題。 但由於並非root用戶,/usr/local下沒有cuda,於是便無法按照參考1中的方法去做。 這裡提供一種方法,其實是參考了文獻2,但似乎是歪打正著,因為2要解決的問題 ...
  • 瞭解過 Hex 六邊形架構、Onion 洋蔥架構、Clean 整潔架構的同學可以將本篇文章介紹的實踐方法與自身項目代碼架構對比並互通有無,共同改進。沒瞭解過上述架構的同學可以學習一種新的架構方法,並嘗試將其應用到業務項目中,降低項目維護成本,提高效率。 本文提及的架構主要指項目組織的“代碼架構”,註... ...
  • 在C++/Qt網路通訊模塊設計與實現(三)中提到了一個概念,即接受者所依附的線程;關註我微信公眾號的技術朋友留言對該概念還是不解,這節就單獨講述這個概念的理論與實際應用,這種應用無處不在,因為與Qt的信號槽、線程相關,大家需掌握。接下來從 Qt::ConnectionType,示例源碼,結果論證,歸 ...
  • 發現報錯:RuntimeError: NCCL error in: /pytorch/torch/lib/c10d/ProcessGroupNCCL.cpp:784, unhandled system error想在linux上跑跑mmclassification中的resnet網路,但是報錯,查閱... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...