一、Series
pd.Series(data=https://www.cnblogs.com/pineapple-chicken/p/None, index=None, dtype=None): 用于創建一個一維的帶“軸標簽”的ndarray陣列
data:可以是串列,字典,標量值,numpy創建的一維陣列
index:data的“標簽”,默認從0開始分配,index長度和data的長度要相同;如果data為字典并且給定index,則index會取代字典的key,成為value的標簽;默認標簽和給定標簽共存,
import pandas as pd import numpy as np
#串列創建 a1 = pd.Series([1,2,3], index=['a','b','c']) print(a1) #標量值創建 a2 = pd.Series(10, index=list('12345')) print(a2) #字典創建 a3 = pd.Series({'a':1, 'b':2, 'c':3}) print(a3) a4 = pd.Series({'a':1, 'b':2, 'c':3}, index=['e','b','a']) #index自動與dict的key匹配 print(a4) #numpy創建 a5 = pd.Series(np.arange(1,5), index=np.arange(1,5)) print(a5)
常用屬性:
index:回傳陣列的標簽
values:回傳陣列的值
name:回傳Series的名稱,也可以用來修改Series的名稱
size:回傳陣列的元素數
常用方法:
pd.Series.add(self, other, fill_value=https://www.cnblogs.com/pineapple-chicken/p/None)
標簽相同的相加,標簽不同回傳NaN;如果給定fill_value,則缺失值填充為fill_value


pd.Series.copy(self, deep=True)
陣列的拷貝,默認為深拷貝,
import pandas as pd import numpy as np a = pd.Series(np.arange(1,5), index=list('abcd')) b = a.copy() c = a.copy(deep=False) a['a'] = 10 print(a) #10, 2, 3, 4 print(b) #1, 2, 3, 4 print(c) #10, 2, 3, 4
pd.Series.get(self, key, default=None)
獲取陣列中key對應的值(例如:DataFrame的column),如果未找到,則回傳默認值
索引與切片:當給定index時,既可以通過給定的index索引,又可以通過默認的index索引;可以通過自定義索引串列進行切片
import pandas as pd a = pd.Series([1,2,3], index=list('abd')) #DataFrame上不能這樣索引 print(a[0]) #1 print(a['a']) #1 #下面兩種方法都可用于切片 print(a['a':'d']) print(a[['a','b','d']])
pd.Series.unique() 回傳唯一值
pd.Series.value_counts(self, normalize=False, sort=True, ascending=True, bins=None, dropna=True): 回傳各個元素的個數,normalize為True時,統計每個元素的占比;bins為整數時,根據整數值將陣列離散化為該整數個段;dropna為False時,會統計陣列中NaN的個數
二、DataFrame
pd.DataFrame(data=https://www.cnblogs.com/pineapple-chicken/p/None, index=None, columns=None, dtype=None, copy=False): 用于創建一個帶“行標簽”和“列標簽”的表格型的資料型別
data:可以是ndarray;元組、串列、字典等可迭代物件
index:行標簽,如果沒有定義或者data沒有提供,則默認從0開始
columns:列標簽,如果沒有定義,則默認從0開始
import pandas as pd import numpy as np df = pd.DataFrame(np.arange(1,10).reshape(3,3), columns=list('abc')) print(df) # 從字典創建 d1 = {'one':[1,2,3], 'two':[4,5,6]} df1 = pd.DataFrame(d1, index=list('abc')) print(df1)
# 改變列索引
df2 = pd.DataFrame(d1, columns=['two', 'one'])
print(df2)
把DataFrame變為串列形式的一種方法:
import numpy as np import pandas as pd frame = pd.DataFrame(np.arange(12).reshape(3,4), columns=list('abcd')) frame_to_list1 = frame.values.tolist() frame_to_list2 = frame['a'].tolist() print(frame_to_list1) #[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]] print(frame_to_list2) #[0, 4, 8]
常用屬性:
index:回傳行標簽
columns:回傳列標簽
values:回傳陣列中元素的值
shape:回傳DataFrame的形狀
size:回傳ndarray陣列中元素的個數
at:通過標簽訪問單個元素
iat:通過整數位置訪問單個元素

iloc: 通過整數位置訪問DataFrame某幾行或某個資料
loc:通過標簽或布爾陣列訪問DataFrame的資料
import numpy as np import pandas as pd frame = pd.DataFrame(np.arange(12).reshape(3,4), index=list('abc'), columns=['num','name','sex','age']) #單個標簽 print(frame.loc['a']) #行和列的多個標簽 print(frame.loc[['a','b'],['num','name']]) #行和列的單標簽,輸出對應的單個元素 print(frame.loc['a','num']) #行切片,切片的開始和結束都包含在里面 print(frame.loc['a':'c']) print(frame['a':])
#布爾串列 [[]]回傳一個DataFrame print(frame.loc[[False,True,True]]) #按條件篩選 print(frame[frame.age>4].iloc[:, :3]) print(frame[frame['age']>4].iloc[:, :3]) #DataFrame要獲取某行的資料要用iloc或者loc,不能直接用行標簽; 篩選某列可以直接標簽索引 frame[['num']] 或者 frame.num

加入新的一列:
import pandas as pd dict = {'one':[1,2,3], 'two':[4,5,6]} df1 = pd.DataFrame(dict, index=['a','b','c']) col = pd.Series([7,8,9], index=df1.index) df1['three'] = col print(df1)
常用方法:
pd.DataFrame.drop(labels=None, axis=0, index=None, columns=None):洗掉指定的行或列標簽
回傳被被洗掉行或列的DataFrame,原資料不變
import pandas as pd import numpy as np frame = pd.DataFrame(np.arange(12).reshape(3,4),
index=list('123'),columns=list('abcd')) #刪掉a,b兩列 print(frame.drop(['a','b'],axis=1)) #刪掉1,2兩行 print(frame.drop(index=['1','2']))
#永久洗掉某列
del frame['d']
print(frame.columns)
pd.DataFrame.reindex():重新排列索引或者加入新定義的索引
reindex(self, labels=None, index=None, column=None, axis=None, method=None, copy=True, fill_value=https://www.cnblogs.com/pineapple-chicken/p/nan)
index\columns:新的行列的自定義索引
fill_value:新的行列的填充值
import pandas as pd import numpy as np frame = pd.DataFrame(np.arange(12).reshape(3,4),index=list('123'),columns=list('abcd')) #重新排列行索引 print(frame.reindex(index=list('321'))) #加入新的索引列 newc = frame.columns.insert(3,'e') print(frame.reindex(columns=newc,fill_value=https://www.cnblogs.com/pineapple-chicken/p/'20')) #創建一個新索引 new_index = ['0','2','3'] print(frame.reindex(new_index))
pd.DataFrame.head():回傳前n行資料,默認為5行
算術運算(索引對應運算):
add(self, other, axis='columns', level=None, fill_value=https://www.cnblogs.com/pineapple-chicken/p/None):加法運算
sub(self, other, axis='columns', level=None, fill_value=https://www.cnblogs.com/pineapple-chicken/p/None):減法運算
div(self, other, axis='columns', level=None, fill_value=https://www.cnblogs.com/pineapple-chicken/p/None):除法運算
mul(self, other, axis='columns', level=None, fill_value=https://www.cnblogs.com/pineapple-chicken/p/None):乘法運算
import pandas as pd import numpy as np frame1 = pd.DataFrame(np.arange(12).reshape(3,4)) print(frame1) frame2 = pd.DataFrame(np.arange(9).reshape(3,3)) print(frame2) #frame1與frame2對應相加,不對應的地方與填充值相加,沒有填充值資料丟失 print(frame1.add(frame2, fill_value=https://www.cnblogs.com/pineapple-chicken/p/100)) series = pd.Series(np.arange(3)) print(series) #默認frame1的每一行加上series print(frame1.add(series)) #frame1的每一列減去series print(frame1.sub(series,axis=0))
pd.DataFrame.append(self, other, ignore_index=False):把一個DataFrame加到另一個DataFrame的末尾,回傳一個新的物件
import pandas as pd import numpy as np frame1 = pd.DataFrame(np.arange(6).reshape(3,2)) frame2 = pd.DataFrame(np.arange(4).reshape(2,2)) print(frame1.append(frame2)) #放棄原來的索引,行索引從0開始
print(frame1.append(frame2, ignore_index=True))
info():列印DataFrame的簡要資訊
where():當給定條件成立時,保持原始值;當給定條件不成立時,用給定值替換條件不成立處的值

corr(self, method='pearson', min_periods=1):計算列的成對相關性,不包括NA和空值
sort_values(by, axis=0, ascending=True):對數值進行排序,by是某一列的標簽或者某幾列標簽組成的串列
sort_index(axis=0, ascending=True):對標簽進行排序
映射操作
apply(func, axis=0):將DataFrame的每個元素交由func處理
map():是Series的一種方法;可以映射新的一列
import numpy as np import pandas as pd frame = pd.DataFrame(np.random.randn(3,4), index=list('abc'), columns=['name','sex','age','score']) print(frame) frame1 = frame.apply(lambda x: x.max()-x.min()) # 按行操作,從上往下 print(frame1) frame2 = frame.apply((lambda x: x.max()-x.min()), axis=1) print(frame2)
#Series.map(arg)
import numpy as np import pandas as pd frame = pd.DataFrame(np.random.randn(3,4), index=list('abc'), columns=['name','sex','age','score']) print(frame) frame1 = frame['score'].map(lambda x: '%.2f'%x) print(frame1)
分組操作
groupby(by=None, axis=0): 對資料按要求進行分組,然后可以進行數值操作,使用groups查看分組情況

缺失值處理:
python的 None 與 NaN
None是python object,不能參與計算
np.nan是浮點型別,可以參與計算,但結果總是nan
pd.DataFrame.isnull(obj):檢查缺失值,回傳布林值 (結合any進行檢測)
pd.DataFrame.notnull(obj):檢查非缺失值 (結合all進行檢測)
pd.DataFrame.dropna(axis=0, how='any'):洗掉缺失值,axis可以是{0, ‘index’, 1, 'columns'};how可以是{‘any’, 'all'},all表示如果整行或整列值是缺失值,則洗掉這行或列;any表示行或列中有缺失值,則洗掉這行或列

pd.DataFrame.fillna(value='https://www.cnblogs.com/pineapple-chicken/p/None', method='None', axis='None'):用某種方法(‘backfill’, ‘bfill’ // ‘pad’, ‘ffill’)填補缺失值;value要是scalar、dict、Series、DataFame,不能是list

按條件清洗

pd.DataFrame.replace(to_replace='None',value='https://www.cnblogs.com/pineapple-chicken/p/None'):用value的值去取代to_replace的值;to_replace可以是numeric、list、dict
拼接操作:
pd.concat(objs, axis=0, keys='None', names='None', ignore_index='False')

pd.merge(left, right, how='inner', on=None) 合并要有共同的列,或者用left_on和right_on,how='outer' 進行合并
left: DataFrame
right: DataFrame or Series
how: {‘left’, ‘right’, ‘outer’, ‘inner’} 連接條件:outer可以連接兩張表所有資料,保證完整性; left保留左表的資料完整
on 指定合并條件,例如 on=‘group‘ 則是按兩表的group合并; 還有left_on 和 right_on,按這兩列中的元素進行合并

按條件查詢
pd.DataFrame.query(expr) expr為字串形式的條件運算式

對行或者列改變位置
pd.DataFrame.take(indices, axis=0) indices是一個整數標簽陣列
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/183072.html
標籤:Python
上一篇:實體化Servlet類[org.springframework.web.servlet.DispatcherServlet]例外
