日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

掌握这些 NumPy Pandas 方法,快速提升数据处理效率!

發布時間:2024/9/15 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 掌握这些 NumPy Pandas 方法,快速提升数据处理效率! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Pandas 是基于NumPy 的一種工具,該工具是為解決數據分析任務而創建的。pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。pandas提供了大量能使我們快速便捷地處理數據的函數和方法。你很快就會發現,它是使python成為強大而高效的數據分析環境的重要因素之一。

NumPy

NumPy庫是Python中用于科學計算的核心庫。它提供了一個高性能的多維數組對象,以及用于處理這些數組的工具。

導入Numpy

import?numpy?as?np

創建 Arrays

>>>?a?=?np.array([1,2,3]) >>>?b?=?np.array([(1.5,2,3),?(4,5,6)],?dtype?=?float) >>>?c?=?np.array([[(1.5,2,3),?(4,5,6)],?[(3,2,1),?(4,5,6)]],dtype?=?float) #?創建一個由0組成的數組 >>>?np.zeros((3,4))? #?創建一個1的數組 >>>?np.ones((2,3,4),dtype=np.int16)? #?創建一個等距值數組(步長值) >>>?d?=?np.arange(10,25,5)? #?創建一個等距值數組(樣本數) >>>?np.linspace(0,2,9)? #?創建一個常量數組 >>>?e?=?np.full((2,2),7)? #?創建一個2X2單位矩陣 >>>?f?=?np.eye(2)? #?創建一個隨機值的數組 >>>?np.random.random((2,2))? #?創建一個空數組 >>>?np.empty((3,2))?

輸入與輸出

  • 從磁盤上導入與存儲

>>>?np.save('my_array',?a) >>>?np.savez('array.npz',?a,?b) >>>?np.load('my_array.npy')
  • 導入與存儲文本文件

>>>?np.loadtxt("myfile.txt") >>>?np.genfromtxt("my_file.csv",?delimiter=',') >>>?np.savetxt("myarray.txt",?a,?delimiter="?")

數據類型

>>>?np.int64???#?有符號64位整數類型 >>>?np.float32?#?標準雙精度浮點數 >>>?np.complex?#?由128個浮點數表示的復數 >>>?np.bool????#?布爾類型,存儲TRUE和FALSE值 >>>?np.object??#?Python對象類型 >>>?np.string_?#?固定長度的字符串類型 >>>?np.unicode_#?固定長度的unicode類型

查看數組

>>>?a.shape????#?陣列尺寸 >>>?len(a)?????#?數組的長度 >>>?b.ndim?????#?陣列維數 >>>?e.size?????#?數組元素數 >>>?b.dtype????#?數組元素的數據類型 >>>?b.dtype.name??#?數據類型名稱 >>>?b.astype(int)?#?將數組轉換為不同類型

獲取幫助

>>>?np.info(np.ndarray.dtype)

Array 算術運算

>>>?g?=?a?-?b????????#?減法 array([[-0.5,?0.?,?0.?],[-3.?,?-3.?,?-3.?]])? >>>?np.subtract(a,b)?#?減法 >>>?b?+?a????????????#?加法 array([[?2.5,?4.?,?6.?],[?5.?,?7.?,?9.?]])? >>>?np.add(b,a)??????#?加法 >>>?a?/?b????????????#?除法 array([[?0.66666667,?1.?,??1.?],0.25???????,?0.4,??0.5]) >>>?a?*?b????????????#?乘法 array([[?1.5,?4.??,?9.??],[?4.?,?10.?,?18.?]])? >>>?np.multiply(a,b)?#?乘法 >>>?np.divide(a,b)???#?除法 >>>?np.exp(b)??#?求冪 >>>?np.sqrt(b)?#?平方根 >>>?np.sin(a)??#?輸出一個數組的正弦值 >>>?np.cos(b)??#?輸出一個數組的余弦值 >>>?np.log(a)??#?輸出一個數組的自然對數 >>>?e.dot(f)???#?點積 array([[?7.,?7.],?[?7.,?7.]])

比較大小

>>>?a?==?b??#?數組元素比較 array([[False,?True,?True],[False,?False,?False]],?dtype=bool)? >>>?a?<?2???#?數組元素比較 array([True,?False,?False],?dtype=bool)? >>>?np.array_equal(a,?b)?#?數組比較

統計函數

>>>?a.sum()????#?數組求和 >>>?a.min()????#?數組最小值 >>>?b.max(axis=0)????#?數組行最大值 >>>?b.cumsum(axis=1)?#?元素均值的累積和 >>>?a.mean()?????#?中位數 >>>?b.median()???#?相關系數 >>>?a.corrcoef()?#?相關系數 >>>?np.std(b)????#?標準偏差

數組拷貝

>>>?h?=?a.view()?#?使用相同的數據創建數組的視圖 >>>?np.copy(a)???#?創建數組的副本 >>>?h?=?a.copy()?#?創建數組的深層副本

數組排序

>>>?a.sort()???????#?排序數組 >>>?c.sort(axis=0)?#?對數組橫軸的元素進行排序

切片與索引

  • 獲取單個元素

>>>?a[2]???#?選擇第二個索引處的元素 3 >>>?b[1,2]?#?選擇第1行第2列的元素(相當于b[1][2]) 1.5?2?3?6.0?456
  • 獲取子集

>>>?a[0:2]??#?選擇索引0和1的項 array([1,?2])? >>>?b[0:2,1]?#?選擇第1列中第0行和第1行中的項目 array([?2.,?5.]) >>>?b[:1]??#?選擇第0行中的所有項目,等價于b[0:1,:] array([[1.5,?2.,?3.]]) >>>?c[1,...]??#?與[1,:,:]一樣 array([[[3.,?2.,?1.],[4.,?5.,?6.]]]) >>>?a[?:?:-1]??#?逆轉了數組 array([3,?2,?1])
  • 布爾索引

>>>?a[a<2]??#?從小于2的a中選擇元素 array([1])
  • 花俏的索引

>>>?b[[1,?0,?1,?0],[0,?1,?2,?0]]?#?選擇元素(1,0),(0,1),(1,2)?和?(0,0) array([4.,2.,6.,1.5]) >>>?b[[1,?0,?1,?0]][:,[0,1,2,0]]?#?選擇矩陣的行和列的子集 array([[4.,5.,6.,4.],?[1.5,2.,3.,1.5],?[4.,5.,6.,4.],[1.5,2.,3.,1.5]])

數組操作

  • 轉置數組

>>>?i?=?np.transpose(b)?#?交換數組維度 >>>?i.T
  • 改變數組形狀

>>>?b.ravel()???????#?將數組壓平 >>>?g.reshape(3,-2)?#?不會改變數據
  • 添加和刪除數組元素

>>>?h.resize((2,6))????#?返回一個具有形狀(2,6)的新數組 >>>?np.append(h,g)?????#?向數組添加項 >>>?np.insert(a,?1,?5)?#?在數組中插入項 >>>?np.delete(a,[1])???#?從數組中刪除項
  • 合并數組

>>>?np.concatenate((a,d),axis=0)#?連接數組 array([?1,?2,?3,?10,?15,?20]) >>>?np.vstack((a,b))??????#?垂直(行)堆疊陣列 array([[?1.?,?2.?,?3.?],?[?1.5,?2.?,?3.?],[?4.?,?5.?,?6.?]])? >>>?np.r_[e,f]????????????#?垂直(行)堆疊陣列 >>>?np.hstack((e,f))??????#?水平(列)堆疊陣列 array([[?7.,?7.,?1.,?0.],[?7.,?7.,?0.,?1.]])? >>>?np.column_stack((a,d))#?創建堆疊的列陣列 array([[?1,?10],?[?2,?15],[?3,?20]]) >>>?np.c_[a,d]???????????#?創建堆疊的列陣列
  • 分割數組

>>>?np.hsplit(a,3)??#?在第3個索引處水平分割數組 [array([1]),array([2]),array([3])] >>>?np.vsplit(c,2)??#?在第二個索引處垂直分割數組 [array([[[?1.5,?2.?,?1.?],[?4.?,?5.?,?6.?]]]),?array([[[?3.,?2.,?3.],[?4.,?5.,?6.]]])]

Pandas

Pandas庫建立在NumPy上,并為Python編程語言提供了易于使用的數據結構和數據分析工具。

導入Pandas

>>>?import?pandas?as?pd

Series

>>>?s?=?pd.Series([3,5,-7,9],?index=['A',?'B',?'C',?'D'])

DataFrame

>>>?data?=?{'Country':?['Belgium',?'India',?'Brazil'],'Capital':?['Brussels',?'New?Delhi',?'Brasília'],'Population':?[11190846,?1303171035,?207847528]} >>>?df?=?pd.DataFrame(data,columns=['Country',?'Capital',?'Population'])

獲取幫助信息

>>>?help(pd.Series.loc)

切片與索引

  • 獲取元素

>>>?s['b']?#?獲取一個元素 -5 >>>?df[1:]?#?獲取DataFrame子表Country???Capital???? Population1???India???New?Delhi???13031710352??Brazil???Brasi?lia????207847528
  • 布爾索引

#?通過位置 >>>?df.iloc[[0],[0]]??#?按行和列選擇單個值 'Belgium' >>>?df.iat([0],[0])??? 'Belgium' #?通過標簽 >>>?df.loc[[0],?['Country']]?#?通過行和列標簽選擇單個值 'Belgium' >>>?df.at([0],?['Country'])?? 'Belgium' #?通過標簽或位置 >>>?df.ix[2]????????????#?選擇行子集中的單行 Country????Brazil? Capital????Brasília? Population?207847528 >>>?df.ix[:,'Capital']??#?選擇列子集中的單列 0?Brussels 1?New?Delhi 2?Brasília >>>?df.ix[1,'Capital']??#?選擇行和列 'New?Delhi' #?布爾索引 >>>?s[~(s?>?1)]???????????#?選擇Series?s的值不大于1的子集 >>>?s[(s?<?-1)?|?(s?>?2)]?#?選擇Seriess的值是<-1或>2?的子集 >>>?df[df['Population']>1200000000]?#?使用過濾器來調整數據框 #?設置 >>>?s['a']?=?6?#?將Series?s的索引a設為6

Dropping

>>>?s.drop(['a',?'c'])?#?從行刪除值?(axis=0)? >>>?df.drop('Country',?axis=1)?#?從列刪除值

Sort & Rank

>>>?df.sort_index()?#?按軸上的標簽排序? >>>?df.sort_values(by='Country')?#?按軸上的值排序 >>>?df.rank()

檢索Series / DataFrame上的信息

  • 基礎信息

>>>?df.shape???#?(行、列) >>>?df.index???#?描述指數 >>>?df.columns?#?描述DataFrame列 >>>?df.info()??#?DataFrame信息 >>>?df.count()?#?非空值的個數
  • 統計信息

>>>?df.sum()??????????#?值的總和 >>>?df.cumsum()???????#?值的累積和 >>>?df.min()/df.max()?#?最小/最大值 >>>?df.idxmin()/df.idxmax()?#?最小/最大索引值 >>>?df.describe()#?摘要統計信息 >>>?df.mean()????#?值的意思 >>>?df.median()??#?中位數的值

Apply 函數

>>>?f?=?lambda?x:?x*2 >>>?df.apply(f)????????#?Apply函數 >>>?df.applymap(f)?????#?Apply每個元素

數據一致性

  • 內部數據一致

在不重疊的索引中引入NA值

>>>?s3?=?pd.Series([7,?-2,?3],?index=['a',?'c',?'d']) >>>?s?+?s3 a?10.0? b?NaN? c?5.0? d?7.0
  • 填充方法的算術運算

你也可以在fill方法的幫助做內部數據一致

>>>?s.add(s3,?fill_value=0)? a?10.0 b?-5.0 c?5.0 d?7.0 >>>?s.sub(s3,?fill_value=2)? >>>?s.div(s3,?fill_value=4)? >>>?s.mul(s3,?fill_value=3)

輸入與輸出

  • 讀取與寫入到CSV

>>>?pd.read_csv('file.csv',?header=None,?nrows=5)? >>>?df.to_csv('myDataFrame.csv')
  • 讀取與寫入到Excel

>>>?pd.read_excel('file.xlsx') >>>?pd.to_excel('dir/myDataFrame.xlsx',?sheet_name='Sheet1') #?從同一個文件中讀取多個工作表 >>>?xlsx?=?pd.ExcelFile('file.xls') >>>?df?=?pd.read_excel(xlsx,?'Sheet1')
  • 讀取與寫入到SQL 查詢或數據庫表中

>>>?from?sqlalchemy?import?create_engine >>>?engine?=?create_engine('sqlite:///:memory:') >>>?pd.read_sql("SELECT?*?FROM?my_table;",?engine) >>>?pd.read_sql_table('my_table',?engine) >>>?pd.read_sql_query("SELECT?*?FROM?my_table;",?engine)>>>?pd.to_sql('myDf',?engine)

read_sql()是read_sql_table()和read_sql_query()到一個便捷的封裝。

數據透視Pivot

#?將行展開成列 >>>?df3=?df2.pivot(index='Date',columns='Type',values='Value')

數據透視表Pivot_table

#?將行展開成列 >>>?df4?=?pd.pivot_table(df2,?values='Value',index='Date',columns=['Type'])

堆疊 stack/unstack

stack和unstack是python進行層次化索引的重要操作。

  • Stack: 將數據的列索引轉換為行索引(列索引可以簡單理解為列名)

  • Unstack: 將數據的行索引轉換為列索引

>>>?stacked?=?df5.stack() >>>?stacked.unstack()?? pandas.melt(frame,?id_vars=None,?value_vars=None,?var_name=None,?value_name='value',?col_level=None)

frame:
要處理的數據集。

id_vars:
不需要被轉換的列名。

value_vars:
需要轉換的列名,如果剩下的列全部都要轉換,就不用寫了。

var_namevalue_name:
是自定義設置對應的列名。

col_level :
如果列是MultiIndex,則使用此級別。

寬數據--->>長數據,有點像用excel做透視跟逆透視的過程。

>>>?pd.melt(df2,id_vars=["Date"],value_vars=["Type",?"Value"],value_name="Observations")

迭代

#?(Column-index,?Series)?對 >>>?df.iteritems()? #?(Row-index,?Series)?對 >>>?df.iterrows()?

高級索引

#?按條件選擇 >>>?df3.loc[:,(df3>1).any()]???????#?選擇只要有變量大于1的列 >>>?df3.loc[:,(df3>1).all()]???????#?選擇所有變量大于1的列 >>>?df3.loc[:,df3.isnull().any()]??#?選擇帶NaN的列 >>>?df3.loc[:,df3.notnull().all()]?#?選擇不帶NaN的列 #?用isin索引選擇 >>>?df[(df.Country.isin(df2.Type))]?#?找到相同的元素 >>>?df3.filter(items=["a","b"])?????#?過濾值 >>>?df.select(lambda?x:?not?x%5)????#?選擇特定的元素 #?Where >>>?s.where(s?>?0)??#?滿足條件的子集的數據 #?Query >>>?df6.query('second?>?first')??#?查詢DataFrame

設置與重置索引

>>>?df.set_index('Country')??#?設置索引 >>>?df4?=?df.reset_index()???#?重置索引 #?DataFrame重命名 >>>?df?=?df.rename(index=str,columns={"Country":"cntry",?"Capital":"cptl",?"Population":"ppltn"})

重建索引

>>>?s2?=?s.reindex(['a','c','d','e','b'])
  • 向前填充

>>?df.reindex(range(4),method='ffill') Country?Capital?Population? 0?Belgium?Brussels?11190846? 1?India?New?Delhi?1303171035? 2?Brazil?Brasília?207847528? 3?Brazil?Brasília?207847528
  • 向后填充

>>>?s3?=?s.reindex(range(5),?method='ffill') 0??3? 1??3? 2??3? 3??3? 4??3

多重索引

>>>?arrays?=?[np.array([1,2,3]),np.array([5,4,3])] >>>?df5?=?pd.DataFrame(np.random.rand(3,?2),?index=arrays) >>>?tuples?=?list(zip(*arrays)) >>>?index?=?pd.MultiIndex.from_tuples(tuples,names=['first',?'second']) >>>?df6?=?pd.DataFrame(np.random.rand(3,?2),?index=index) >>>?df2.set_index(["Date",?"Type"])

數據去重

>>>?s3.unique()????????????#?返回唯一的值 >>>?df2.duplicated('Type')?#?檢查特定列重復的 >>>?df2.drop_duplicates('Type',?keep='last')?#?去重 >>>?df.index.duplicated()??#?檢查索引重復

數據聚合

  • groupby

>>>?df2.groupby(by=['Date','Type']).mean() >>>?df4.groupby(level=0).sum() >>>?df4.groupby(level=0).agg({'a':lambda?x:sum(x)/len(x),'b':?np.sum})
  • 轉換 Transformation

transform?法,它與apply很像,但是對使?的函數有?定限制:

  • 它可以產?向分組形狀?播標量值

  • 它可以產??個和輸?組形狀相同的對象

  • 它不能修改輸?

>>>?customSum?=?lambda?x:?(x+x%2) >>>?df4.groupby(level=0).transform(customSum)

缺失值處理

>>>?df.dropna()???????????#?刪除缺失值 >>>?df3.fillna(df3.mean())#?用特定的值填充NaN值 >>>?df2.replace("a",?"f")?#?使用其他值替換缺失值

數據合并

  • Merge

>>>?pd.merge(data1,data2,how='left',on='X1') >>>?pd.merge(data1,data2,how='right',on='X1') >>>?pd.merge(data1,data2,how='inner',on='X1') >>>?pd.merge(data1,data2,how='outer',on='X1')
  • Join

join方法提供了一個簡便的方法用于將兩個DataFrame中的不同的列索引合并成為一個DataFrame。

其中參數的意義與merge方法基本相同,只是join方法默認為左外連接how=left。

>>>?data1.join(data2,?how='right')
  • Concatenate

#?垂直拼接 >>>?s.append(s2) #?水平或垂直拼接 >>>?pd.concat([s,s2],axis=1,?keys=['One','Two']) >>>?pd.concat([data1,?data2],?axis=1,?join='inner')

日期

>>>?df2['Date']=?pd.to_datetime(df2['Date']) >>>?df2['Date']=?pd.date_range('2000-1-1',freq='M') >>>?dates?=?[datetime(2012,5,1),?datetime(2012,5,2)] >>>?index?=?pd.DatetimeIndex(dates) >>>?index?=?pd.date_range(datetime(2012,2,1),?end,?freq='BM')

可視化

  • Series可視化

>>>?import?matplotlib.pyplot?as?plt >>?s.plot() >>>?plt.show()>>>?df2.plot() >>>?plt.show()

萬水千山總是情,點個??????行不行

推薦閱讀

Pandas處理數據太慢,來試試Polars吧!

懶人必備!只需一行代碼,就能導入所有的Python庫

絕!關于pip的15個使用小技巧

介紹10個常用的Python內置函數,99.99%的人都在用!

可能是全網最完整的 Python 操作 Excel庫總結!

總結

以上是生活随笔為你收集整理的掌握这些 NumPy Pandas 方法,快速提升数据处理效率!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。