資料影格(DataFrame)是二維資料結構,即資料以行和列的表格方式排列。
資料影格(DataFrame)的功能特點:
結構體
假設要建立一個包含學生資料的資料影格。參考以下圖示 -
可以將上圖表視為SQL表或電子試算表資料表示。
pandas中的DataFrame
可以使用以下建構函式建立 -
pandas.DataFrame( data, index, columns, dtype, copy)
建構函式的引數如下 -
編號 | 引數 | 描述 |
---|---|---|
1 | data |
資料採取各種形式,如:ndarray ,series ,map ,lists ,dict ,constant 和另一個DataFrame 。 |
2 | index |
對於行標籤,要用於結果影格的索引是可選預設值np.arrange(n) ,如果沒有傳遞索引值。 |
3 | columns |
對於列標籤,可選的預設語法是 - np.arange(n) 。 這只有在沒有索引傳遞的情況下才是這樣。 |
4 | dtype |
每列的資料型別。 |
5 | copy |
如果預設值為False ,則此命令(或任何它)用於複製資料。 |
Pandas資料影格(DataFrame)可以使用各種輸入建立,如 -
在本章的後續章節中,我們將看到如何使用這些輸入建立資料影格(DataFrame)。
建立基本資料影格是空資料影格。
範例
#import the pandas library and aliasing as pd
import pandas as pd
df = pd.DataFrame()
print df
執行上面範例程式碼,得到以下結果 -
Empty DataFrame
Columns: []
Index: []
可以使用單個列表或列表列表建立資料影格(DataFrame)。
範例-1
import pandas as pd
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print df
執行上面範例程式碼,得到以下結果 -
0
0 1
1 2
2 3
3 4
4 5
範例-2
import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
print df
執行上面範例程式碼,得到以下結果 -
Name Age
0 Alex 10
1 Bob 12
2 Clarke 13
範例-3
import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)
print df
執行上面範例程式碼,得到以下結果 -
Name Age
0 Alex 10.0
1 Bob 12.0
2 Clarke 13.0
注意 - 可以觀察到,
dtype
引數將Age
列的型別更改為浮點。
所有的ndarrays
必須具有相同的長度。如果傳遞了索引(index
),則索引的長度應等於陣列的長度。
如果沒有傳遞索引,則預設情況下,索引將為range(n)
,其中n
為陣列長度。
範例-1
import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print df
執行上面範例程式碼,得到以下結果 -
Age Name
0 28 Tom
1 34 Jack
2 29 Steve
3 42 Ricky
註 - 觀察值
0
,1
,2
,3
。它們是分配給每個使用函式range(n)
的預設索引。
範例-2
使用陣列建立一個索引的資料影格(DataFrame)。
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
執行上面範例程式碼,得到以下結果 -
Age Name
rank1 28 Tom
rank2 34 Jack
rank3 29 Steve
rank4 42 Ricky
注意 -
index
引數為每行分配一個索引。
字典列表可作為輸入資料傳遞以用來建立資料影格(DataFrame),字典鍵預設為列名。
範例-1
以下範例顯示如何通過傳遞字典列表來建立資料影格(DataFrame)。
import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print df
執行上面範例程式碼,得到以下結果 -
a b c
0 1 2 NaN
1 5 10 20.0
注意 - 觀察到,NaN(不是數位)被附加在缺失的區域。
範例-2
以下範例顯示如何通過傳遞字典列表和行索引來建立資料影格(DataFrame)。
import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print df
執行上面範例程式碼,得到以下結果 -
a b c
first 1 2 NaN
second 5 10 20.0
範例-3
以下範例顯示如何使用字典,行索引和列索引列表建立資料影格(DataFrame)。
import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
#With two column indices, values same as dictionary keys
df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b'])
#With two column indices with one index with other name
df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1'])
print df1
print df2
執行上面範例程式碼,得到以下結果 -
#df1 output
a b
first 1 2
second 5 10
#df2 output
a b1
first 1 NaN
second 5 NaN
注意 - 觀察,
df2
使用字典鍵以外的列索引建立DataFrame
; 因此,附加了NaN到位置上。 而df1
是使用列索引建立的,與字典鍵相同,所以也附加了NaN。
字典的系列可以傳遞以形成一個DataFrame。 所得到的索引是通過的所有系列索引的並集。
範例
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 two
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4
注意 - 對於第一個系列,觀察到沒有傳遞標籤
'd'
,但在結果中,對於d
標籤,附加了NaN。
現在通過範例來了解列選擇,新增和刪除。
下面將通過從資料影格(DataFrame)中選擇一列。
範例
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']
執行上面範例程式碼,得到以下結果 -
a 1.0
b 2.0
c 3.0
d NaN
Name: one, dtype: float64
下面將通過向現有資料框新增一個新列來理解這一點。
範例
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)
# Adding a new column to an existing DataFrame object with column label by passing new series
print ("Adding a new column by passing as Series:")
df['three']=pd.Series([10,20,30],index=['a','b','c'])
print df
print ("Adding a new column using the existing columns in DataFrame:")
df['four']=df['one']+df['three']
print df
執行上面範例程式碼,得到以下結果 -
Adding a new column by passing as 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
Adding a new column using the existing columns in DataFrame:
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
列可以刪除或彈出; 看看下面的例子來了解一下。
例子
# Using the previous DataFrame, we will delete a column
# using del function
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
執行上面範例程式碼,得到以下結果 -
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
現在將通過下面範例來了解行選擇,新增和刪除。我們從選擇的概念開始。
標籤選擇
可以通過將行標籤傳遞給loc()
函式來選擇行。參考以下範例程式碼 -
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']
執行上面範例程式碼,得到以下結果 -
one 2.0
two 2.0
Name: b, dtype: float64
結果是一系列標籤作為DataFrame
的列名稱。 而且,系列的名稱是檢索的標籤。
按整數位置選擇
可以通過將整數位置傳遞給iloc()
函式來選擇行。參考以下範例程式碼 -
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]
執行上面範例程式碼,得到以下結果 -
one 3.0
two 3.0
Name: c, dtype: float64
可以使用:
運算子選擇多行。參考以下範例程式碼 -
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]
執行上面範例程式碼,得到以下結果 -
one two
c 3.0 3
d NaN 4
附加行
使用append()
函式將新行新增到DataFrame。 此功能將附加行結束。
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
執行上面範例程式碼,得到以下結果 -
a b
0 1 2
1 3 4
0 5 6
1 7 8
刪除行
使用索引標籤從DataFrame中刪除或刪除行。 如果標籤重複,則會刪除多行。
如果有注意,在上述範例中,有標籤是重複的。這裡再多放一個標籤,看看有多少行被刪除。
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
執行上面範例程式碼,得到以下結果 -
a b
1 3 4
1 7 8
在上面的例子中,一共有兩行被刪除,因為這兩行包含相同的標籤0
。