數(shù)據(jù)分析—Pandas 的兩種數(shù)據(jù)結(jié)構(gòu)

一、數(shù)據(jù)結(jié)構(gòu)

pandas主要用于處理非數(shù)值數(shù)據(jù),numpy用來處理數(shù)值數(shù)據(jù)

image.png

二、常用數(shù)據(jù)類型:

1、series 一維, 帶標(biāo)簽數(shù)組
①創(chuàng)建series
# 導(dǎo)入包
import numpy as np
import pandas as pd
# 使用列表生成一個series
obj = pd.Series([4, 7, -5, 3])
print(obj)
print(obj.values)
print(obj.index)
image
# 使用數(shù)組生成一個Series
s2  = pd.Series(np.arange(7))
print(s2)
# 使用一個字典生成Series,其中字典的鍵,就是索引
s3 = pd.Series({'1':1, '2':2, '3':3})
print(s3)
print(s3.values)
print(s3.index)
②默認(rèn)索引是從0開始,下面修改索引
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
print(obj2)
print(obj2['a'])
image
obj2['d'] = 6
print(obj2[['c', 'a', 'd']])
image
obj2[obj2 > 0]
image
obj2 * 2
image
③常用屬性和方法
np.exp(obj2)
image
print('b' in obj2)
print('e' in obj2)
image
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = pd.Series(sdata)
obj3
image
states = ['California', 'Ohio', 'Oregon', 'Texas']
obj4 = pd.Series(sdata, index=states) # 自動與dict的key匹配obj4
image
print(pd.isnull(obj4))
print(pd.notnull(obj4))
image
print(obj3 + obj4) # 數(shù)據(jù)自動對齊
image
a = {string.ascii_uppercase[i]: i for i in range(10)}
obj = Series(a)
print(obj[:3])
image.png
obj4.name = '人口'
obj4.index.name = '州'
obj4
image
obj = Series([4, 7, -5, 3])
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan'] # 更新索引obj
image
2、DataFrame 二維, 它里面包含一個個的Series
① 創(chuàng)建DataFrame
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], 
'year': [2000, 2001, 2002, 2001, 2002],        
'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = DataFrame(data) # key對應(yīng)frame的列名frame
image
frame = DataFrame(data, columns=['year', 'state', 'pop']) # 指定列順序frame
image
frame2 = DataFrame(data,                  
columns=['year', 'state', 'pop', 'debt'],                   
index=['one', 'two', 'three', 'four', 'five']) # 分別指定行列名字,缺失值自動填充,比如debt列。frame2
image
print(frame2['state']) # 通過索引返回指定列,返回類型為Series
print(frame2.year)
print(type(frame.state))
image
print(frame2.loc['three']) # 使用loc訪問行,iloc針對默認(rèn)的數(shù)字索引print(frame2.iloc[0])
image
frame2['debt'] = 16.5 # 修改整列值frame2
image
frame2['debt'] = np.arange(5.)
frame2
image
val = Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
frame2['debt'] = val # 索引不匹配的話自動補NaNframe2
image
del frame2['eastern'] # 刪除指定列frame2.columns
image
pop = {'Nevada': {2001: 2.4, 2002: 2.9},      
'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = DataFrame(pop) # 通過嵌套字典指定列和行索引frame3.T # 轉(zhuǎn)置
image
pop = {'Nevada': {2001: 2.4, 2002: 2.9}, 
'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = DataFrame(pop) # 通過嵌套字典指定列和行索引
DataFrame(pop, index=[2001, 2002, 2003]) # 索引2003匹配不到,自動填充NaN
image
pdata = {'Ohio': frame3['Ohio'][:-1],         
'Nevada': frame3['Nevada'][:2]} # 使用Series替代普通數(shù)組DataFrame(pdata)
image
frame3.index.name = 'year' # 設(shè)置索引和列的名字frame3.columns.name = 'state'frame3
image
print('Ohio' in frame3.columns)
print(2003 in frame3.index)
image

三、Index的方法和屬性

append:      連接另一個Index對象,產(chǎn)生一個新的Index。
diff:        計算差集,并得到一個Index。
intersection:計算交集
union:       計算并集
isin:        計算一個指示各值是否都包含在參數(shù)集合中的布爾型數(shù)組
delete:      刪除索引i處的元素,并得到新的Index。
drop:        刪除傳入的值,并得到新的Index。
insert:      將元素插入到索引i處,并得到新的Index。
is_monotonic:如果單調(diào)增長,返回True。
is_unique:   當(dāng)Index沒有重復(fù)值時,返回True。
unique:      計算Index中唯一值得數(shù)組

四、pandas 知識結(jié)構(gòu)匯總

series 一維 帶標(biāo)簽的一組數(shù)據(jù)
dataframe 二維 有行標(biāo)簽有列標(biāo)簽
查看列類型: df.dtypes
查看行數(shù)列數(shù):df.shape
查看列索引:df.colums
查看行索引:df.index
查看各個字段的記錄數(shù):df.count()
查看前五條數(shù)據(jù):df.head()
查看最后五條數(shù)據(jù):df.tail()
查看數(shù)據(jù)維度:df.ndim
查看數(shù)據(jù)對象值,二維數(shù)組:df.values
查看相關(guān)信息概覽(行數(shù),列數(shù),列索引,列非空值個數(shù),列類型,內(nèi)存占用):df.info()
快速綜合統(tǒng)計結(jié)果(計數(shù),均值,保準(zhǔn)值,最大值,四分位數(shù),最小值):df.describe()
重命名,并覆蓋原名:df.rename({'原名':'新名',inplace = true})
查看每列是否有空值:df.isnull().any()
查看某列是否有缺失值:df[df[['列名1','列名2']].isnull().values == True]
刪除重復(fù)值:df[df[['列名1','列名2']].isnull().values == True].drop_duplicates()
指定列刪除重復(fù)值:salesDf.drop_duplicates(subset=['列名1', '列名2'])
刪除缺失數(shù)據(jù):df= df.dropna(subset=['列名1','列名2'],how = 'any')
更新索引序號:df.reset_index(drop=True)
類型轉(zhuǎn)換(str轉(zhuǎn)為float):df['銷售數(shù)量'] = df['銷售數(shù)量'].astype('float')
數(shù)據(jù)類型轉(zhuǎn)為日期型:pd.to_datetime(df['銷售時間'], format = '%Y-%m-%d', errors='coerce')
排序(默認(rèn)升序,參數(shù)ascending=False 為降序):salesDf.sort_values(by='列名')
指定位置幾行幾列:df.loc[0,'銷售時間']
分組求和:
gb = df.groupby(df.index.month)
mounthDf = gb.sum()
顯示所有列
pd.set_option('display.max_columns', None)
顯示所有行
pd.set_option('display.max_rows', None)
設(shè)置value的顯示長度為100,默認(rèn)為50
pd.set_option('max_colwidth',100)
更改數(shù)據(jù)類型:astype('str')
增加 df[列名] = 值
刪除 del df[列名]
修改 df[列名] = 新值
查找 df.query("(a==1) & (b==2)")
df.loc[行標(biāo)簽名] 支持bool過濾:df.loc[df.b ==5 ,'a'] = 20
df.iloc[第一行:第幾列] 不支持bool過濾
df.T 行列標(biāo)簽顛倒
df.sort_values([標(biāo)簽名,標(biāo)簽名1],ascending = False) 按值進行排序
df.sort_index([標(biāo)簽名],ascending = False) 按索引進行排序
df.avg.rank(ascending = False) 排名
df['panduan'] = df .state == 'Ohio' 判斷state是否等于Ohio true|false
df.workYear.unique() 查看唯一值
df.workYear.value_counts() 查看唯一值數(shù)量
df.reindex([]) 重新建立索引
df.avg.cumsum() 累加求和
df.describe() 描述統(tǒng)計
pd.cut(df.avg.bins=[0,5,10,20,30,40,100],lables=['0~5','5~10','10~20','20~30','30~40','40~100']) 分級
df.groupy(by='city').count()按照城市分組并取到數(shù)量
df.groupby(by =['city','workYear']).min() 多重索引
關(guān)聯(lián)方法
concat 堆疊 多表合并 類似sql 中的union pd.concat([表1,表2],axis=1) 默認(rèn)上下拼接,axis=1左右拼接
join 根據(jù)索引 表1.join(表2) 默認(rèn)根據(jù)索引連接
merge 根據(jù)鍵值
position.merge(right=company,how='inner',on='companyId') 關(guān)聯(lián)id 名稱相同
position.merge(right=company,how='inner',left_on='companyId',right_on='Id) 關(guān)聯(lián)id 名稱不相同
多重索引
df.sort_values(['city', 'workYear']).set_index(['city', 'workYear']) 列變成索引
df.groupby(by =['city','workYear']).max().reset_index() 重置索引
文本函數(shù)
df.字段名.str.count('數(shù)據(jù)分析') 某字符出現(xiàn)的次數(shù)
df.字段名.str.find('數(shù)據(jù)分析') 某字符出現(xiàn)的位置
df.字段名.str[1:-1] 去除方括號里面的字符
df.字段名.str.[1:-1] .str.replace("’","")去除某個符號
pandas 空值處理
df.loc[df.city=='上海','secondType'] = np.NaN 根據(jù)條件,指定列為NaN
df.fillna(1) NaN填充為1
df.dropna() 刪除NaN的行
pd = pd.Series([1,1,2,3]) pd.drop_duplicates 去除重復(fù)值
pd = pd.Series([1,1,2,3]) p = pd[~pd.duplicated()] 去除重復(fù)值
apply 把自定義函數(shù)應(yīng)用到所有的行和列上 優(yōu)點:速度快
df.education.apply(lambda x:str(x) + '生')
參數(shù)axis = 0 默認(rèn)行 axis = 1 針對列
不同城市薪資排位前5的
def func(x):
x.sort_values('companyId',ascending=False)
return x[:5]
df.groupby('city').apply(func)
數(shù)據(jù)透視表 生成一個新的表格
df.pivot_table(index='city',columns='workYear',values='companyId',aggfunc=[np.mean,np.sum],margins=True,dropna=False,)['mean'].loc['上海']
輸出:df····.reset_index().to_csv(‘文件名.csv’)

以上涵蓋工作中大部分pandas數(shù)據(jù)處理常用知識點,其實不難,重要的是多練習(xí),加油~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容