pandas學習筆記2 DataFrame

2021-08-21 12:35:09 字數 4856 閱讀 7093

本次從dataframe的基本定義、建立、索引、取值/賦值幾個方面進行基本的入門介紹

定義

dataframe是個**型的資料結構,既包括行索引,也包括列索引,類似於numpy的二維陣列,它可以被看做是n個series的集合。

建立

dataframe的建立形式有許多,可以通過二維陣列、等長列表字典、字典組成的字典、由series組成的字典等多種方式建立等。dataframe在建立時可通過columns和index指定它的行索引和列索引,當然也可不指定索引,系統缺省會建立0/1/2/3形式的數字索引。

二維陣列建立形式(不指定行索引和列索引)

dataframe(np.zeros([3,3]))

out[124]:

0 1 2

0 0.0 0.0 0.0

1 0.0 0.0 0.0

2 0.0 0.0 0.0

二維陣列建立形式(指定行索引和列索引)

dataframe(np.zeros([3,3]),columns=[1,2,3],index=['a','b','c'])

out[128]:

1 2 3

a 0.0 0.0 0.0

b 0.0 0.0 0.0

c 0.0 0.0 0.0

等長列表字典建立形式

data=

frame=dataframe(data)

frame

out[127]:

state year pop

0 ohio 2000 1.5

1 nevada 2001 1.7

2 ohio 2002 1.2

3 nevada 2001 1.8

4 nevada 2002 1.4

等長列表字典建立形式(指定行索引和列索引)

frame1=dataframe(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five'])

frame1

out[157]:

year state pop debt

one 2000 ohio 1.5 nan

two 2001 nevada 1.7 nan

three 2002 ohio 1.2 nan

four 2001 nevada 1.8 nan

five 2002 nevada 1.4 nan

frame1=dataframe(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five','six'])

traceback (most recent call last):

file "", line 1, in frame1=dataframe(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five','six'])

file "f:\programdata\anaconda3\lib\site-packages\pandas\core\frame.py", line 348, in __init__

mgr = self._init_dict(data, index, columns, dtype=dtype)

file "f:\programdata\anaconda3\lib\site-packages\pandas\core\frame.py", line 459, in _init_dict

return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)

file "f:\programdata\anaconda3\lib\site-packages\pandas\core\frame.py", line 7323, in _arrays_to_mgr

return create_block_manager_from_arrays(arrays, arr_names, axes)

file "f:\programdata\anaconda3\lib\site-packages\pandas\core\internals.py", line 4877, in create_block_manager_from_arrays

construction_error(len(arrays), arrays[0].shape, axes, e)

file "f:\programdata\anaconda3\lib\site-packages\pandas\core\internals.py", line 4843, in construction_error

passed, implied))

valueerror: shape of passed values is (4, 5), indices imply (4, 6)

可以看到,列索引中多出了debt,因data中不存在與其對應的字典值,故被自動賦予了nan。若在行索引index中出現了多餘的索引,則不會被賦予nan,而是會報錯提示超出了範圍

索引

dataframe的索引有行索引、列索引、值索引三種,行/列索引結果為乙個列表,值索引的結果為乙個陣列,故其相應的列表和陣列的操作也適用於索引結果。

frame1

out[159]:

year state pop debt

one 2000 ohio 1.5 nan

two 2001 nevada 1.7 nan

three 2002 ohio 1.2 nan

four 2001 nevada 1.8 nan

five 2002 nevada 1.4 nan

frame1.columns

out[160]: index(['year', 'state', 'pop', 'debt'], dtype='object')

frame1.index

out[161]: index(['one', 'two', 'three', 'four', 'five'], dtype='object')

frame1.values

out[162]:

array([[2000, 'ohio', 1.5, nan],

[2001, 'nevada', 1.7, nan],

[2002, 'ohio', 1.2, nan],

[2001, 'nevada', 1.8, nan],

[2002, 'nevada', 1.4, nan]], dtype=object)

取值/賦值

dataframe可通過指定行/列索引物件的方式進行取值、賦值

frame1.year

out[180]:

one 2000

two 2001

three 2002

four 2001

five 2002

name: year, dtype: int64

frame1['year']

out[181]:

one 2000

two 2001

three 2002

four 2001

five 2002

name: year, dtype: int64

frame1.ix['one']

out[182]:

year 2000

state ohio

pop 1.5

debt nan

name: one, dtype: object

賦值

frame1['debt']=np.array(range(5))

frame1

out[185]:

year state pop debt

one 2000 ohio 1.5 0

two 2001 nevada 1.7 1

three 2002 ohio 1.2 2

four 2001 nevada 1.8 3

five 2002 nevada 1.4 4

列、行索引命名

frame1.index.name='number'

frame1.columns.name='state'

frame1

out[188]:

state year state pop debt

number

one 2000 ohio 1.5 0

two 2001 nevada 1.7 1

three 2002 ohio 1.2 2

four 2001 nevada 1.8 3

five 2002 nevada 1.4 4

pandas學習筆記 DataFrame(2)

另一種常見的資料形式是巢狀字典 也就是字典的字典 pop ohio 如果將它傳給dataframe,它就會被解釋為 外層字典的鍵作為列,內層鍵則作為行索引 frame3 pd.dataframe pop print frame3輸出結果 nevada ohio 2000 nan1.5 2001 2....

python學習筆記 pandas練習(2)

這幾天遇到一些合併表的需求。需要將多個表進行橫向合併。查閱pandas的功能,提供了這個鏈結的作用。以下是讀取多個csv的資料下面看一下實驗過程。首先,我們將 設定為csv格式,每乙個 只包含2個字段id和price 2個字段。依次類推,建五個表,每乙個表分別是 這樣資料。1 20 2 30 3 4...

pandas學習筆記(2) 多層索引

用from product series np.random.randint 0,150,size 8 index pd.multiindex.from product a b c d 期中 期末 out 23 a 期中 51 期末 133 b 期中 132 期末 115 c 期中 65 期末 91...