掌握这些 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.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)?#?對數組橫軸的元素進行排序切片與索引
獲取單個元素
獲取子集
布爾索引
花俏的索引
數組操作
轉置數組
改變數組形狀
添加和刪除數組元素
合并數組
分割數組
Pandas
Pandas庫建立在NumPy上,并為Python編程語言提供了易于使用的數據結構和數據分析工具。
導入Pandas
>>>?import?pandas?as?pdSeries
>>>?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)切片與索引
獲取元素
布爾索引
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上的信息
基礎信息
統計信息
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
讀取與寫入到Excel
讀取與寫入到SQL 查詢或數據庫表中
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: 將數據的行索引轉換為列索引
frame:
要處理的數據集。
id_vars:
不需要被轉換的列名。
value_vars:
需要轉換的列名,如果剩下的列全部都要轉換,就不用寫了。
var_name和value_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'])向前填充
向后填充
多重索引
>>>?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
轉換 Transformation
transform?法,它與apply很像,但是對使?的函數有?定限制:
它可以產?向分組形狀?播標量值
它可以產??個和輸?組形狀相同的對象
它不能修改輸?
缺失值處理
>>>?df.dropna()???????????#?刪除缺失值 >>>?df3.fillna(df3.mean())#?用特定的值填充NaN值 >>>?df2.replace("a",?"f")?#?使用其他值替換缺失值數據合并
Merge
Join
join方法提供了一個簡便的方法用于將兩個DataFrame中的不同的列索引合并成為一個DataFrame。
其中參數的意義與merge方法基本相同,只是join方法默認為左外連接how=left。
>>>?data1.join(data2,?how='right')Concatenate
日期
>>>?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可視化
萬水千山總是情,點個??????行不行。
推薦閱讀
Pandas處理數據太慢,來試試Polars吧!
懶人必備!只需一行代碼,就能導入所有的Python庫
絕!關于pip的15個使用小技巧
介紹10個常用的Python內置函數,99.99%的人都在用!
可能是全網最完整的 Python 操作 Excel庫總結!
總結
以上是生活随笔為你收集整理的掌握这些 NumPy Pandas 方法,快速提升数据处理效率!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 15 只是一个更好看的 Linu
- 下一篇: 解放双手|Python 自动搜索、翻译、