python 熊猫_python之pandas简单介绍及使用(一)
一、 Pandas簡介
1、Python Data Analysis Library 或 pandas 是基于NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。Pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。pandas提供了大量能使我們快速便捷地處理數據的函數和方法。你很快就會發現,它是使Python成為強大而高效的數據分析環境的重要因素之一。
2、Pandas 是python的一個數據分析包,最初由AQR Capital Management于2008年4月開發,并于2009年底開源出來,目前由專注于Python數據包開發的PyData開發team繼續開發和維護,屬于PyData項目的一部分。Pandas最初被作為金融數據分析工具而開發出來,因此,pandas為時間序列分析提供了很好的支持。 Pandas的名稱來自于面板數據(panel data)和python數據分析(data analysis)。panel data是經濟學中關于多維數據集的一個術語,在Pandas中也提供了panel的數據類型。
3、數據結構:
Series:一維數組,與Numpy中的一維array類似。二者與Python基本的數據結構List也很相近,其區別是:List中的元素可以是不同的數據類型,而Array和Series中則只允許存儲相同的數據類型,這樣可以更有效的使用內存,提高運算效率。
Time- Series:以時間為索引的Series。
DataFrame:二維的表格型數據結構。很多功能與R中的data.frame類似。可以將DataFrame理解為Series的容器。以下的內容主要以DataFrame為主。
Panel :三維的數組,可以理解為DataFrame的容器。
Pandas 有兩種自己獨有的基本數據結構。讀者應該注意的是,它固然有著兩種數據結構,因為它依然是 Python 的一個庫,所以,Python 中有的數據類型在這里依然適用,也同樣還可以使用類自己定義數據類型。只不過,Pandas 里面又定義了兩種數據類型:Series 和 DataFrame,它們讓數據操作更簡單了。
二、 Pandas安裝
因為pandas是python的第三方庫所以使用前需要安裝一下,直接使用pip install pandas 就會自動安裝pandas以及相關組件。
三、 Pandas使用
注:本次操作是在ipython中進行
1、導入pandas模塊并使用別名,以及導入Series模塊,以下使用基于本次導入。
In [1]: from pandas import Series
In [2]: import pandas as pd
2、Series
Series 就如同列表一樣,一系列數據,每個數據對應一個索引值。
Series 就是“豎起來”的 list:
In [3]: s = Series([1,4,'ww','tt'])
In [4]: s Out[4]: 0 1 1 4 2 ww 3 tt dtype: object
另外一點也很像列表,就是里面的元素的類型,由你任意決定(其實是由需要來決定)。
這里,我們實質上創建了一個 Series 對象,這個對象當然就有其屬性和方法了。比如,下面的兩個屬性依次可以顯示 Series 對象的數據值和索引:
In [5]: s.index Out[5]: RangeIndex(start=0, stop=4, step=1)
In [8]: s.values Out[8]: array([1, 4, 'ww', 'tt'], dtype=object)
列表的索引只能是從 0 開始的整數,Series 數據類型在默認情況下,其索引也是如此。不過,區別于列表的是,Series 可以自定義索引:
In [9]: s2 = Series(['wangxing','man',24],index=['name','sex','age'])
In [10]: s2 Out[10]: name wangxing sex ? ? ?man age ? ?24 dtype: object
每個元素都有了索引,就可以根據索引操作元素了。還記得 list 中的操作嗎?Series 中,也有類似的操作。先看簡單的,根據索引查看其值和修改其值:
In [12]: s2['name'] Out[12]: 'wangxing'
In [45]: s2['name'] = 'wudadiao'
In [46]: s2 Out[46]: name wudadiao sex man age 24 dtype: object
這是不是又有點類似 dict 數據了呢?的確如此。看下面就理解了。
讀者是否注意到,前面定義 Series 對象的時候,用的是列表,即 Series() 方法的參數中,第一個列表就是其數據值,如果需要定義 index,放在后面,依然是一個列表。除了這種方法之外,還可以用下面的方法定義 Series 對象:
In [13]: sd = {'python':9000,'c++':9001,'c#':9000}
In [14]: s3 = Series(sd)
In [15]: s3 Out[15]: c# 9000 c++ 9001 python 9000 dtype: int64
現在是否理解為什么前面那個類似 dict 了?因為本來就是可以這樣定義的。
這時候,索引依然可以自定義。Pandas 的優勢在這里體現出來,如果自定義了索引,自定的索引會自動尋找原來的索引,如果一樣的,就取原來索引對應的值,這個可以簡稱為“自動對齊”。
In [16]: s4 = Series(sd,index=['java','c++','c#'])
In [17]: s4 Out[17]: java NaN c++ 9001.0 c# 9000.0 dtype: float64
在 Pandas 中,如果沒有值,都對齊賦給 NaN。
Pandas 有專門的方法來判斷值是否為空。
In [19]: pd.isnull(s4) Out[19]: java True c++ False c# False dtype: bool
此外,Series 對象也有同樣的方法:
In [20]: s4.isnull() Out[20]: java True c++ False c# False dtype: bool
其實,對索引的名字,是可以從新定義的:
In [21]: s4.index = ['語文','數學','English']
In [22]: s4 Out[22]: 語文 NaN 數學 9001.0 English 9000.0 dtype: float64
對于 Series 數據,也可以做類似下面的運算(關于運算,后面還要詳細介紹):
In [23]: s4 * 2 Out[23]: 語文 NaN 數學 18002.0 English 18000.0 dtype: float64
In [24]: s4[s4 > 9000] Out[24]: 數學 9001.0 dtype: float64
Series就先簡要寫到這,下面看pandas的另一種數據結構DataFrame.
DataFrame
DataFrame 是一種二維的數據結構,非常接近于電子表格或者類似 mysql 數據庫的形式。它的豎行稱之為 columns,橫行跟前面的 Series 一樣,稱之為 index,也就是說可以通過 columns 和 index 來確定一個主句的位置。
首先來導入模塊
In [27]: from pandas import Series,DataFrame
In [26]: data = {"name":['google','baidu','yahoo'],"marks":[100,200,300],"price":[1,2,3]}
In [28]: f1 = DataFrame(data)
In [29]: f1 Out[29]: marks name price 0 100 google 1 1 200 baidu 2 2 300 yahoo 3
這是定義一個 DataFrame 對象的常用方法——使用 dict 定義。字典的“鍵”("name","marks","price")就是 DataFrame 的 columns 的值(名稱),字典中每個“鍵”的“值”是一個列表,它們就是那一豎列中的具體填充數據。上面的定義中沒有確定索引,所以,按照慣例(Series 中已經形成的慣例)就是從 0 開始的整數。從上面的結果中很明顯表示出來,這就是一個二維的數據結構(類似 excel 或者 mysql 中的查看效果)。
上面的數據顯示中,columns 的順序沒有規定,就如同字典中鍵的順序一樣,但是在 DataFrame 中,columns 跟字典鍵相比,有一個明顯不同,就是其順序可以被規定,向下面這樣做:
In [31]: f2 = DataFrame(data,columns=['name','price','marks'])
In [32]: f2 Out[32]: name price marks 0 google 1 ? ? ?100 1 baidu 2 ? ? ? ?200 2 yahoo 3 ? ? ? 300
跟 Series 類似的,DataFrame 數據的索引也能夠自定義
In [35]: f3 = DataFrame(data,columns=['name','marks','price'],index=['a','b','c'])
In [36]: f3 Out[36]: name marks price a google? ? ? 100 ? ? ?1 b? ? ?baidu? ? ? ? ? 200 ? ? 2 c? ? ?yahoo? ? ? ? ?300? ? ? ? ? ? 3
定義 DataFrame 的方法,除了上面的之外,還可以使用“字典套字典”的方式。
In [40]: newdata = {'lang':{'first':'python','second':'java'},'price':{'first':5000,'second':2000}}
In [41]: f4 = DataFrame(newdata)
In [42]: f4 Out[42]: lang price first python 5000 second? ?java 2000
在字典中就規定好數列名稱(第一層鍵)和每橫行索引(第二層字典鍵)以及對應的數據(第二層字典值),也就是在字典中規定好了每個數據格子中的數據,沒有規定的都是空。
DataFrame 對象的 columns 屬性,能夠顯示素有的 columns 名稱。并且,還能用下面類似字典的方式,得到某豎列的全部內容(當然包含索引):
>>> newdata = {"lang":{"firstline":"python","secondline":"java"}, "price":{"firstline":8000}}
>>> f4 = DataFrame(newdata)
>>> f4
lang? ? ?price
firstline? ? ?python? ?8000
secondline? ? java? ? ?NaN
>>> DataFrame(newdata, index=["firstline","secondline","thirdline"])
lang? ? ?price
firstline? ? ?python? ?8000
secondline? ? java? ? ?NaN
thirdline? ? ?NaN? ? ? NaN
DataFrame 對象的 columns 屬性,能夠顯示素有的 columns 名稱。并且,還能用下面類似字典的方式,得到某豎列的全部內容(當然包含索引):
In [44]: f3['name'] Out[44]: a google b baidu c yahoo Name: name, dtype: object
下面操作是給同一列賦值
newdata1 = {'username':{'first':'wangxing','second':'dadiao'},'age':{'first':24,'second':25}}
In [67]: f6 = DataFrame(newdata1,columns=['username','age','sex'])
In [68]: f6 Out[68]: username age sex first wangxing 24 NaN second dadiao 25 NaN
In [69]: f6['sex'] = 'man'
In [70]: f6 Out[70]: username? age sex first wangxing 24 ? man second dadiao 25? ? man
也可以單獨的賦值,除了能夠統一賦值之外,還能夠“點對點”添加數值,結合前面的 Series,既然 DataFrame 對象的每豎列都是一個 Series 對象,那么可以先定義一個 Series 對象,然后把它放到 DataFrame 對象中。如下:
ssex = Series(['男','女'],index=['first','second'])
In [72]: f6['sex'] = ssex
In [73]: f6 Out[73]: username age sex first wangxing ? ?24 ? ?男 second dadiao 25 女
還可以更精準的修改數據嗎?當然可以,完全仿照字典的操作:
In [74]: f6['age']['second'] = 30
In [75]: f6 Out[75]: username age sex first wangxing 24 ? ? ? ?男 second dadiao 30 女
參考http://wiki.jikexueyuan.com/project/start-learning-python/312.html所整理。
總結
以上是生活随笔為你收集整理的python 熊猫_python之pandas简单介绍及使用(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ChatGPT背后居然藏着“血汗工厂”?
- 下一篇: 谷歌前高管:微软在 AI 搜索方面已经“