Pandas入門學習(1)
阿新 • • 發佈:2018-11-09
文章目錄
Pandas入門學習
Pandas下面有兩種常用資料結構,
Series
和DataFrame
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