1. 程式人生 > >Pandas入門學習(1)

Pandas入門學習(1)

文章目錄

Pandas入門學習

Pandas下面有兩種常用資料結構,SeriesDataFrame

1、Series

系列(Series)是能夠儲存任何型別的資料的一維標記陣列。
軸標籤統稱為索引

Series的構造

pandas.Series( data, index, dtype, copy)
引數 描述
data 資料採集的形式如:ndarray、list、dict
index 索引值必須是唯一的和雜湊的,與資料長度相同。預設:np.arange(n)
dtype dtype 資料型別。預設:推斷資料型別
copy 複製資料。預設:False

建立Series

ndarray建立Series

如果資料是ndarray,傳遞的索引必須具有相同長度。
沒有傳遞索引值,預設索引是返回n,n是陣列長度。

import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s1 = pd.Series(data)
s2 = pd.Series(data, index=list('ABCD'))
print(s1)
print(s2)

0    a
1    b
2    c
3    d
dtype: object
A    a
B    b
C    c
D    d
dtype: object

dict建立Series

dict作為輸入傳遞,如果沒有指定索引,則按字典鍵構造索引
如果指定索引,索引中與標籤對於的資料值將被拉出

import pandas as pd
import numpy as np
data = {'a':0, 'b':1, 'c':2}
s1 = pd.Series(data)
s2 = pd.Series(data, index=list('bcad'))
print(s1)
print(s2)
a    0
b    1
c    2
dtype: int64
b    1.0
c    2.0
a    0.0
d    NaN
dtype: float64

注意: 指定索引,索引順序不變,缺少的元素使用NaN填充。

標量建立Series

資料是標量,必須提供索引,將重複該值匹配索引的長度

import pandas as pd
import numpy as np
s = pd.Series(4, index=list(range(4)))
print(s)
0    4
1    4
2    4
3    4
dtype: int64

訪問Series資料

系列(Series)中的資料可以使用類似於訪問ndarray中的資料來訪問。

使用指定位置訪問Series

import pandas as pd
import numpy as np
s = pd.Series([1,2,3,4], index = list('abcd'))
print(s[0])
print(s[:3])
print(s[-1:])
1
a    1
b    2
c    3
dtype: int64
d    4
dtype: int64

使用標籤訪問Series

import pandas as pd
import numpy as np
s = pd.Series([1,2,3,4], index = list('abcd'))
print(s['a'])
print(s[['a','c']])
1
a    1
c    3
dtype: int64

2、DataFrame

資料幀(DataFrame)是二維陣列結構,資料以行和列的表格方式排列。

DataFrame的構造

pandas.DataFrame( data, index, columns, dtype, copy)
引數 描述
data 資料採集的形式,如:ndarray、series、map、list、dict、constant或DataFrame
index 行標籤。預設索引np.arange(n)
columns 列標籤。預設索引np.arange(n)
dtype 每列資料型別
copy 複製資料。預設:False

建立DataFrame

DataFrame 可以使用各種輸入建立

  • 列表
  • 字典
  • 系列
  • Ndarrays
  • 另一個DataFrame

列表建立DataFrame

使用單個列表或列表列表建立DataFrame

import pandas as pd
import numpy as np
data1 = [1,2,3,4,5]
data2 = [['a',1],['b',2],['c',3]]
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2, columns=['A', 'B'])
print(df1)
print(df2)
   0
0  1
1  2
2  3
3  4
4  5
   A  B
0  a  1
1  b  2
2  c  3

ndarrays/Lists的字典建立DataFrame

所有的ndarrays必須有相同的長度。
如果傳遞索引index,則索引的長度應等於陣列的長度。
如果沒有傳遞索引,預設情況將range(n)作為索引。

import pandas as pd
import numpy as np
data = {'A':['a','b','c'],'B':[1,2,3]}
df = pd.DataFrame(data)
df1 = pd.DataFrame(data, index=list('ABC'))
print(df)
print(df1)

   A  B
0  a  1
1  b  2
2  c  3
   A  B
A  a  1
B  b  2
C  c  3

列表建立DataFrame

import pandas as pd
import numpy as np
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
df1 = pd.DataFrame(data, index=['first','second'])
print(df)
print(df1)
   a   b     c
0  1   2   NaN
1  5  10  20.0
        a   b     c
first   1   2   NaN
second  5  10  20.0

用Series的字典建立DataFrame

字典的系列傳遞形成一個DataFrame,得到的索引是所有Series索引的並集。

import pandas as pd
import numpy as np
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

DataFrame列選擇

import pandas as pd
import numpy as np
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

DataFrame列新增

import pandas as pd
import numpy as np
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)
df['three'] = pd.Series([10,20,30], index=['a','b','e'])
df['four'] = df['one'] + df['three']
print(df)
   one  two  three  four
a  1.0    1   10.0  11.0
b  2.0    2   20.0  22.0
c  3.0    3    NaN   NaN
d  NaN    4    NaN   NaN

DataFrame列刪除

列可以刪除或彈出

import pandas as pd
import numpy as np
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)
del df['one']
df.pop('two')
print(df)
Empty DataFrame
Columns: []
Index: [a, b, c, d]

DataFrame行選擇

通過行標籤傳遞給loc()函式來進行選擇行。

import pandas as pd
import numpy as np
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

通過將正整數傳遞給iloc()函式進行選擇行。

import pandas as pd
import numpy as np
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[1])
one    2.0
two    2.0
Name: b, dtype: float64

DataFrame行切片

使用:運算子選擇多行

import pandas as pd
import numpy as np
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

DataFrame行新增

使用append()函式將新行新增到DataFrame

import pandas as pd
import numpy as np
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行刪除

使用索引行標籤從DataFrame中刪除行
標籤重複,會刪除多行

import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2)
df = df.drop(0)
print(df)
   a  b
1  3  4
1  7  8