import pandas as pd
from pandas import Series, DataFrame
Series
1. 建立Series
直接將列表建立為Series
型別obj = pd.Series([4, 7, -5, 3])
,此時索引為預設0~n
將索引替換為自定義值 obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
對字典直接轉化Series
: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = pd.Series(sdata)
字典轉化但是根據索引順序對應傳值 sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
,states = ['California', 'Ohio', 'Oregon', 'Texas']
提前根據索引定好順序 obj4 = pd.Series(sdata, index=states)
2. 檢視Series
obj.index
檢視索引obj.index.name
索引列的名稱obj.name
表的名稱obj.value
檢視值obj[1]
根據下標檢視值obj['a']
根據索引檢視值obj[2:4]
切片顯示obj[ [1,3] ]
根據下標顯示多個值obj[ [ 'a', 'b', 'c' ] ]
同時查多個值,用雙[ [ ] ]obj[ 'a':'c' ]
索引切片顯示多個obj[ obj < 2 ]
條件布林顯示多個值
3. 布林運算判斷
d 4
b 7
a -5
c 3
dtype: int64
print(obj2 > 0)
所有數判斷True
或 False
obj2[obj2 > 0]
根據判斷選出True
的行6 in obj2
錯誤表述: 判斷索引是否在,不能直接判斷值'e' in obj2
判斷'e'
索引是否存在obj4.isnull()
判斷哪些為空obj4.notnull()
判斷非空
4. 算數運算
obj1 + obj2
索引相同的對應相加,不同的不相加賦值為NaN
,相對應但是有一方為NaN
則結果為NaN
obj2 * 2
全部乘2np.exp(obj2)
全部e的n次方
5. 修改
new_obj = obj.drop('c')
,刪除多行:obj.drop(['b', 'c'])
drop()
的刪除某行時臨時的,需要一個變數儲存結果重新根據 行序列 排序 obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
,可以新新增行序列,預設為空NaN 自動填充–複製上一個值 obj3.reindex(range(6), method='ffill')
根據索引大小排序 obj.sort_index()
按照值排序obj.sort_values()
預設空值排到末尾 計算出當前值所排的名次:obj.rank(method='first')
DataFrame
1. 建立
將等長的列表(非等長會報錯)組成的字典轉化為DataFrame
data = { 'state' : [ 'Ohio' , 'Ohio' , 'Ohio' , 'Nevada' , 'Nevada' , 'Nevada' ] ,
'year' : [ 2000 , 2001 , 2002 , 2001 , 2002 , 2003 ] ,
'pop' : [ 1.5 , 1.7 , 3.6 , 2.4 , 2.9 , 3.2 ] }
frame = pd. DataFrame( data)
columns
定長列表組成字典根據列索引順序排序 轉化為DataFrame pd.DataFrame(data, columns=['year', 'state', 'pop'])
index
設定 行索引 的名稱,如果 列索引 對應資料找不到則為空 frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four','five', 'six'])
2. 檢視顯示
frame.head()
預設顯示前5項
frame.columns
獲取列索引
frame['state']
根據列索引檢視,可以賦值修改
frame[ ['a', 'b'] ]
同時顯示多列
frame[:2]
切片顯示多行
frame[ frame['three'] > 5 ]
條件布林檢視
frame.loc[ 'three' ]
按 行索引值 檢視
frame.loc['Colorado', ['two', 'three']]
先行後列
frame.iloc[ 2 ]
單行
frame.iloc[ [1,2], [3, 0, 1] ]
下標檢視,先行後列
frame.state
根據列索引檢視,但是修改值和刪除不能用
frame.index.name
行向量名稱,可以修改起別名
frame.columns.name
列向量名稱,可以修改起別名
frame.values
檢視整個表資料,以array格式顯示,不會以表格形式表示
frame.index
顯示行標籤,index = frame.index, index[1:]
檢視標籤物件
'a' in frame.columns
判斷列物件是否存在'a'
2003 in frame.index
判斷某索引是否存在
3. 修改
frame['state'] = np.arange(6)
或range(6)
對某列按順序依次賦值,需要長度完全一致frame['state'] = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
通過Series賦值,需要完全匹配行索引,且必須有行索引,長度可以不一致,空位設空del frame['state']
刪除某列臨時刪除需要變數儲存結果frame.drop('a')
刪除單行, frame.drop(['a', 'b'])
刪除多行 frame.drop('two', axis=1)
列刪除,設定axis=1
或axis=columns
徹底刪除跟del
一樣frame.drop('c', inplace=True)
frame.T
轉置根據索引大小排序:frame.sort_index()
預設按行索引排序,frame.sort_index(axis=1, ascending=False)
按列索引排序,降序 按照值排序:frame.sort_values(by='b')
指定列號進行 行排序 計算出當前值所排的名次:frame.rank(method='first', ascending=False, axis='columns')
預設為某列的行排序,axis='columns’則為某行的 列排序
3.1 reindex
修改,不對原資料造成修改,臨時的顯示需要賦值另一變數儲存
重新根據 行序列 排序 obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
,可以新新增行序列,預設為空NaN 自動填充–複製上一個值 obj3.reindex(range(6), method='ffill')
通過columns
重新排列 列序列 states = ['Texas', 'Utah', 'California'], frame.reindex(columns=states)
df1.reindex(columns=df2.columns, fill_value=0)
將所有空值賦值為0
4. 運算
df1 + df2
擴散運算,全部對應相加df1.add(df2, fill_value=0)
在相加之前,將所以NaN賦值為0,然後再相加1/df1
== df1.rdiv(1)
對應相除arr - arr[0]
其中arr
為3*4,此時擴散每行都減去arr[0]
行arr.sub(arr[0], axis='index')
此時為對每列都減去arr[0]
函式運用np.abs(frame)
自定義函式應用f = lambda x: x.max() - x.min()
, frame.apply(f)
將frame
作為引數x
傳入返回frame
```def f(x): return pd.Series([x.min(), x.max()], index=[‘min’, ‘max’])
frame.apply(f)` 返回的可以是一個列表而不僅僅是一個數