Pandas DataFrame基本操作
DataFrame是二維數(shù)據(jù)結(jié)構(gòu),即,數(shù)據(jù)以表格形式在行和列中對齊。
潛在的列是不同類型的 大小可變 標記的軸(行和列) 可以對行和列執(zhí)行算術(shù)運算
Series結(jié)構(gòu)如下:
讓我們假設(shè)我們正在使用學(xué)生的數(shù)據(jù)創(chuàng)建一個數(shù)據(jù)框架。
我們可以將其視為SQL表或電子表格數(shù)據(jù)表示形式。
可以使用以下構(gòu)造函數(shù)創(chuàng)建pandas DataFrame-
pandas.DataFrame( data, index, columns, dtype, copy)
參數(shù)說明:
data:數(shù)據(jù)采用各種形式,例如ndarray,系列,映射,列表,dict,常量以及另一個DataFrame。 index:對于行標簽,如果沒有傳遞索引,則用于結(jié)果幀的索引是Optional Default np.arange(n)。 columns:對于列標簽,可選的默認語法為-np.arange(n)。僅當未傳遞索引時才如此。 dtype:每列的數(shù)據(jù)類型。 copy:如果默認值為False,則此命令(或任何它的命令)用于復(fù)制數(shù)據(jù)。
可以使用各種輸入來創(chuàng)建pandas DataFrame-
Lists dict Series Numpy ndarrays 另一個DataFrame
在本章的后續(xù)部分中,我們將看到如何使用這些輸入來創(chuàng)建DataFrame。
可以創(chuàng)建基本DataFrame是Empty Dataframe。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd df = pd.DataFrame() print(df)
運行結(jié)果:
Empty DataFrame Columns: [] Index: []
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd data = [1,2,3,4,5] df = pd.DataFrame(data) print(df)
運行結(jié)果:
0 0 1 1 2 2 3 3 4 4 5
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd data = [['Alex',10],['Bob',12],['Clarke',13]] df = pd.DataFrame(data,columns=['Name','Age']) print(df)
運行結(jié)果:
Name Age 0 Alex 10 1 Bob 12 2 Clarke 13
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd data = [['Alex',10],['Bob',12],['Clarke',13]] df = pd.DataFrame(data,columns=['Name','Age'],dtype=float) print df
運行結(jié)果:
Name Age 0 Alex 10.0 1 Bob 12.0 2 Clarke 13.0
所有ndarray的長度必須相同。如果傳遞了index,則索引的長度應(yīng)等于數(shù)組的長度。
如果沒有傳遞索引,則默認情況下,索引將是range(n),其中n是數(shù)組長度。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]} df = pd.DataFrame(data) print(df)
運行結(jié)果:
Age Name 0 28 Tom 1 34 Jack 2 29 Steve 3 42 Ricky
我們使用數(shù)組創(chuàng)建索引的DataFrame。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]} df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4']) print(df)
運行結(jié)果:
Age Name rank1 28 Tom rank2 34 Jack rank3 29 Steve rank4 42 Ricky
字典列表可以作為輸入數(shù)據(jù)傳遞以創(chuàng)建DataFrame。默認情況下,字典鍵被用作列名。
下面的示例演示如何通過傳遞字典列表來創(chuàng)建DataFrame。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}] df = pd.DataFrame(data) print(df)
運行結(jié)果:
a b c 0 1 2 NaN 1 5 10 20.0
下面的示例演示如何通過傳遞字典列表和行索引來創(chuàng)建DataFrame。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}] df = pd.DataFrame(data, index=['first', 'second']) print(df)
運行結(jié)果:
a b c first 1 2 NaN second 5 10 20.0
下面的示例演示如何創(chuàng)建包含字典,行索引和列索引的列表的DataFrame。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}] # 有兩個列索引,值與字典鍵相同 df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b']) # 有兩個列索引 df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1']) print(df1) print(df2)
運行結(jié)果:
#df1 output a b first 1 2 second 5 10 #df2 output a b1 first 1 NaN second 5 NaN
可以傳遞系列字典以形成DataFrame。結(jié)果索引是所有通過的系列索引的并集。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} df = pd.DataFrame(d) print(df)
運行結(jié)果:
one two a 1.0 1 b 2.0 2 c 3.0 3 d NaN 4
對于第一個系列,沒有傳遞標簽'd',但是結(jié)果是,對于d標簽,NaN附加了NaN。
現(xiàn)在讓我們通過示例了解列的選擇,添加和刪除。
我們將從DataFrame中選擇一列來了解這一點。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} df = pd.DataFrame(d) print(df ['one'])
運行結(jié)果:
a 1.0 b 2.0 c 3.0 d NaN Name: one, dtype: float64
我們將通過在現(xiàn)有數(shù)據(jù)框中添加新列來了解這一點。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} df = pd.DataFrame(d) #通過傳遞新序列,向具有列標簽的現(xiàn)有 DataFrame 對象添加新列 print ("通過作為 Series 傳遞添加新列:") df['three']=pd.Series([10,20,30],index=['a','b','c']) print df print ("使用 DataFrame 中的現(xiàn)有列添加新列:") df['four']=df['one']+df['three'] print(df)
運行結(jié)果:
通過作為 Series 傳遞添加新列: one two three a 1.0 1 10.0 b 2.0 2 20.0 c 3.0 3 30.0 d NaN 4 NaN 使用 DataFrame 中的現(xiàn)有列添加新列: one two three four a 1.0 1 10.0 11.0 b 2.0 2 20.0 22.0 c 3.0 3 30.0 33.0 d NaN 4 NaN NaN
可以刪除或彈出列;讓我們以一個實例來了解如何。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']), 'three' : pd.Series([10,20,30], index=['a','b','c'])} df = pd.DataFrame(d) print ("Our dataframe is:") print(df) # using del function print ("Deleting the first column using del function:") del df['one'] print(df) # using pop function print ("Deleting another column using POP function:") df.pop('two') print(df)
運行結(jié)果:
Our dataframe is: one three two a 1.0 10.0 1 b 2.0 20.0 2 c 3.0 30.0 3 d NaN NaN 4 Deleting the first column using del function: three two a 10.0 1 b 20.0 2 c 30.0 3 d NaN 4 Deleting another column using POP function: three a 10.0 b 20.0 c 30.0 d NaN
現(xiàn)在,我們將通過示例了解行的選擇,添加和刪除。讓我們從選擇的概念開始。
可以通過將行標簽傳遞給loc函數(shù)來選擇行。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} df = pd.DataFrame(d) print(df.loc['b'])
運行結(jié)果:
one 2.0 two 2.0 Name: b, dtype: float64
結(jié)果是一系列帶有標簽作為DataFrame列名稱的系列。并且,系列的名稱是用來檢索它的標簽。
結(jié)可以通過將整數(shù)位置傳遞給iloc函數(shù)來選擇行。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} df = pd.DataFrame(d) print(df.iloc[2])
運行結(jié)果:
one 3.0 two 3.0 Name: c, dtype: float64
可以使用':'運算符選擇多行。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} df = pd.DataFrame(d) print(df[2:4])
運行結(jié)果:
one two c 3.0 3 d NaN 4
使用append函數(shù)將新行添加到DataFrame中。此函數(shù)將在末尾追加行。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b']) df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b']) df = df.append(df2) print(df)
運行結(jié)果:
a b 0 1 2 1 3 4 0 5 6 1 7 8
使用索引標簽從DataFrame中刪除或刪除行。如果標簽重復(fù),則將刪除多行。
如果您觀察到,在上面的示例中,標簽是重復(fù)的。讓我們刪除一個標簽,將看到將刪除多少行。
# Filename : pandas.py # author by : www.soo66.com # 導(dǎo)入pandas依賴包并起別名 import pandas as pd df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b']) df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b']) df = df.append(df2) # Drop rows with label 0 df = df.drop(0) print(df)
運行結(jié)果:
a b 1 3 4 1 7 8
在上面的示例中,刪除了兩行,因為這兩行包含相同的標簽0。