>>> import pandas as pd
>>> import numpy as np
>>> print(np.__version__), print(pd.__version__)
1.14.3
0.23.0
Series
從 numpy 數組創建,並指定索引值
>>> s1 = pd.Series(np.random.rand(4), index=['a', 'b', 'c', 'd'])
>>> s1
a 0.390501
b 0.460804
c 0.176490
d 0.465754
dtype: float64
如果沒有指定索引,則默認會創建從 0 到 N-1 的數組作為索引值,這里的 N 是 Series 的長度(即它所包含的元素個數):
>>> s2 = pd.Series(np.random.rand(4))
>>> s2
0 0.210839
1 0.979725
2 0.862411
3 0.780342
dtype: float64
通過索引訪問元素
>>> s1['c']
0.176490
>>> # 也可以給元素賦值(修改元素值)
>>> s1['c'] = 3.14
>>> # 同時訪問多個元素
>>> s1[['c', 'a', 'b']]
c 3.140000
a 0.390501
b 0.460804
dtype: float64
從字典中創建
字典中的鍵將會作為索引值,字典中的值將會作為元素值:
>>> s3 = pd.Series({'001': 'Nam', '002': 'Mary', '003': 'Peter'})
>>> s3
001 Nam
002 Mary
003 Peter
dtype: object
從字典中創建 Series 時,也可以自定義索引值或者是添加過濾(即指定只從字典中的某幾個鍵進行創建)。當自定義的索引值不存在於字典中的鍵時,默認會用NaN
來作為這個索引的值:
>>> s4 = pd.Series({'001': 'Nam', '002': 'Mary', '003': 'Peter'}, index=['002', '001', '024', '065'])
>>> s4
002 Mary
001 Nam
024 NaN
065 NaN
dtype: object
可以看到,由於傳進來的字典中只有001
和002
這兩個鍵,於是創建的 Series 中只保留了這兩項,而024
和065
對應的值則是NaN
。
判斷元素是否為空
>>> pd.isnull(s4)
002 False
001 False
024 True
065 True
dtype: bool
從標量值創建
>>> s5 = pd.Series(2.71, index=['x', 'y'])
>>> s5
x 2.71
y 2.71
dtype: float64
可以理解為:指定多少個索引,創建的 Series 中就會包含多少個相同值的元素
相加
這里主要演示的是,Pandas 會自動根據索引來對齊兩個 Series 然后再進行數學運算
>>> s6 = pd.Series(np.array([2.71, 3.14]), index=['z', 'y'])
>>> s6
z 2.71
y 3.14
dtype: float64
>>> s5 + s6
x NaN
y 5.85
z NaN
dtype: float64
DataFrame
從字典中創建
>>> data = {'Year': [2000, 2005, 2010, 2014],
'Median_Age': [24.2, 26.4, 28.5, 30.3],
'Density': [244, 256, 268, 279]}
>>> df1 = pd.DataFrame(data)
>>> df1
Year Median_Age Density
0 2000 24.2 244
1 2005 26.4 256
2 2010 28.5 268
3 2014 30.3 279
默認順序是傳進去的字典的順序,也可以根據列名(column)進行指定:
>>> df2 = pd.DataFrame(data, columns=['Year', 'Density', 'Median_Age'])
>>> df2
Year Density Median_Age
0 2000 244 24.2
1 2005 256 26.4
2 2010 268 28.5
3 2014 279 30.3
也可以像 Series 那樣指定索引值:
>>> df3 = pd.DataFrame(data, columns=['Year', 'Density', 'Median_Age'], index=['a', 'b', 'c', 'd'])
>>> df3.index
Index(['a', 'b', 'c', 'd'], dtype='object')
直接從嵌套的列表中創建
>>> df4 = pd.DataFrame([
['Peter', 16, 'pupil', 'TN', 'M', None],
['Mary', 21, 'student', 'SG', 'F', None],
['Nam', 22, 'student', 'HN', 'M', None],
['Mai', 31, 'nurse', 'SG', 'F', None],
['John', 28, 'laywer', 'SG', 'M', None]],
columns=['name', 'age', 'careet', 'province', 'sex', 'award'])
>>> # 有兩種方式可以取到某一列。前提是這個列名不包含空格等特殊字符
>>> # 如果包含空格,則只能使用第二種方式
>>> df4.name
0 Peter
1 Mary
2 Nam
3 Mai
4 John
Name: name, dtype: object
>>> df4['name']
0 Peter
1 Mary
2 Nam
3 Mai
4 John
Name: name, dtype: object
>>> # 修改某一列(整列)的內容
>>> df4['award'] = None
name age careet province sex award
0 Peter 16 pupil TN M None
1 Mary 21 student SG F None
2 Nam 22 student HN M None
3 Mai 31 nurse SG F None
4 John 28 laywer SG M None
從文件中生成
從 CSV 文件中生成
假設有名為 person.csv 的文件內容如下:
name,age,career,province,sex
Peter,16,pupil,TN,M
Mary,21,student,SG,F
Nam,22,student,HN,M
Mai,31,nurse,SG,F
John,28,lawer,SG,M
可使用read_csv
來進行讀取,直接生成 DataFrame
>>> df4 = pd.read_csv('person.csv')
>>> df4
name age career province sex
0 Peter 16 pupil TN M
1 Mary 21 student SG F
2 Nam 22 student HN M
3 Mai 31 nurse SG F
4 John 28 lawer SG M
0.23.0 版本的 pandas 中的read_csv
函數有 49 個參數,分別有不同的用途,比如指定分隔符、指定哪一行做為列名、跳過開頭幾行、忽略末尾幾行等等。可以通過查看文檔了解。