pandas學習之DataFrame

上一節學習了Series相關的概念,這部分的知識是學習pandas另一數據結構:DataFrame的基礎。

DataFrame是二維的、有標記的數據結構,它可以具有可能不同類型的列。

可以將其看做類似SQL表格,或者包含多個Series對象的字典。

 

DataFrame可接受數據類型

DataFrame可以接受多種數據輸入:

  • 由一維ndarray構成的字典, 列表, 字典, 或者是Series

  • 二維的ndarray

  • 單獨的Series

  • 其它的DataFrame

 

由字典構成DataFrame

如果構成dataframe的元素沒有對應的index,比如例子中的列名爲two的index是從a->b,但是列名爲one的index只有a,b,c,所以在形成的dataframe中,列one對應索引爲d的值爲NaN:

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.0
b  2.0  2.0
c  3.0  3.0
d  NaN  4.0

當然,也可以通過索引來構建DataFrame,只選取特定index的值構成dataframe:

d = {
     'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])
    }

print(pd.DataFrame(d, index=['d', 'b', 'a']))

->

   one  two
d  NaN  4.0
b  2.0  2.0
a  1.0  1.0

 

通過list或者ndarray來構建dataframe

不指定index,默認從0開始,最大爲list或者是array的長度:

d = {'one': [1., 2., 3., 4.],
     'two': [4., 3., 2., 1.]}
df = pd.DataFrame(d)
print(df)

->
   one  two
0  1.0  4.0
1  2.0  3.0
2  3.0  2.0
3  4.0  1.0

df = pd.DataFrame(d,index=['a','b','c','d'])
print(df)

->
   one  two
a  1.0  4.0
b  2.0  3.0
c  3.0  2.0
d  4.0  1.0

 

通過多個dict構建dataframe

這塊的邏輯其實和通過ndarray構建dataframe的邏輯差不多:

data2 = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
print(pd.DataFrame(data2))
print(pd.DataFrame(data2, index=['first', 'second']))

->

   a   b     c
0  1   2   NaN
1  5  10  20.0

        a   b     c
first   1   2   NaN
second  5  10  20.0

查看dataframe的列和行:

查看行枚舉值:df.index

查看列枚舉值:df.columns

 

不同的構造函數:

1.DataFrame.from_dict

2.DataFrame.from_records

通過以上兩種構造函數,可以將dict和tuple列表以及結構化的ndarray構建成dataframe。

 

在語義上,DataFrame可以看爲相似索引的Series對象的字典。 獲取,設置和刪除列的語法與dict操作的語法類似。

DataFrame可以選取特定列,增加列,刪除列等等操作......

#選取列
data2 = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df2=pd.DataFrame(data2)
print(df2)
print(df2['a'])

->
   a   b     c
0  1   2   NaN
1  5  10  20.0

0    1
1    5
Name: a, dtype: int64


#增加
df2['d']=df2['a']*df2['b']
print(df2)


->

   a   b     c   d
0  1   2   NaN   2
1  5  10  20.0  50

#刪除

del df2['d']
df2.pop('c')
print(df2)

->
   a   b
0  1   2
1  5  10

當然,dataframe裏面可以指定位置插入列:

df2.insert(1, 'bar', df2['a'])
print(df2)

->

   a  bar   b
0  1    1   2
1  5    5  10

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章