大家知道,python有一個(gè)比較強(qiáng)大的功能,那就是可以進(jìn)行數(shù)據(jù)挖掘,它的數(shù)據(jù)挖掘能力還是比較的強(qiáng)大的。另外,我們?cè)谑褂肞andas的時(shí)候,也會(huì)有各種各樣的問(wèn)題,下面就給大家進(jìn)行詳細(xì)解答。
1DataFrame
Pandas=panel+data+analysis
主要是用于大數(shù)據(jù)挖掘的開(kāi)源系統(tǒng)Python庫(kù)
以Numpy為載體,借助Numpy控制模塊這時(shí)候計(jì)算層面特性強(qiáng)的優(yōu)越性
根據(jù)matplotlib,可以簡(jiǎn)單的繪圖
與眾不同的算法設(shè)計(jì)
方便快捷的數(shù)據(jù)分析能力
讀取文件便捷
封裝形式了Matplotlib、Numpy的繪圖和計(jì)算
核心算法設(shè)計(jì)
DataFrame(是series的容器,一般二維)
Panel(是dataframe的容器,三維)
Series(一維)
1.1構(gòu)造dataframe利用DataFrame函數(shù)
索引:行索引-index,橫向索引;列索引-columns,縱向索引
值:values,利用values即可直接獲得去除索引的數(shù)據(jù)(數(shù)組)
shape:表明形狀(形狀不含索引的行列)
T:行列轉(zhuǎn)置
DataFrame是一個(gè)既有行索引又有列索引的二維數(shù)據(jù)結(jié)構(gòu)
importnumpyasnp importpandasaspd a=np.ones((2,3)) b=pd.DataFrame(a) print(a) print(b)
如圖,生成的打他frame是一個(gè)二維表,由于沒(méi)有指定索引,因此默認(rèn)行列索引為數(shù)字序號(hào)
1.2常用操作(設(shè)置索引)
1.獲取局部展示
b.head()#默認(rèn)展示前5行,可在head()加入數(shù)字,展示前幾行 b.tail()#默認(rèn)展示后5行,可在tail()加入數(shù)字,展示后幾行
2.獲取索引和值
importnumpyasnp #創(chuàng)建一個(gè)符合正態(tài)分布的10個(gè)股票5天的漲跌幅數(shù)據(jù) stock_change=np.random.normal(0,1,(10,5)) pd.DataFrame(stock_change) #設(shè)置行列索引 stock=["股票{}".format(i)foriinrange(10)] date=pd.date_range(start="20200101",periods=5,freq="B")#這個(gè)是pandas中設(shè)置日期的 #添加行列索引 data=pd.DataFrame(stock_change,index=stock,columns=date) print(data)
3.設(shè)置行列索引
#創(chuàng)建一個(gè)符合正態(tài)分布的10個(gè)股票5天的漲跌幅數(shù)據(jù)
stock_change=np.random.normal(0,1,(10,5)) pd.DataFrame(stock_change) #設(shè)置行列索引 stock=["股票{}".format(i)foriinrange(10)] date=pd.date_range(start="20200101",periods=5,freq="B")#這個(gè)是pandas中設(shè)置日期的 #添加行列索引 data=pd.DataFrame(stock_change,index=stock,columns=date) print(data)
4.修改索引
#不能多帶帶修改行列總某一個(gè)索引的值,可以替換整行或整列例:b.index[2]='股票1'錯(cuò)誤 data.index=新行索引 #重設(shè)索引 data.reset_index(drop=False) #drop參數(shù)默認(rèn)為False,表示將原來(lái)的索引替換掉,換新索引為數(shù)字遞增,原來(lái)的索引將變?yōu)閿?shù)據(jù)的一部分。True表示,將原來(lái)的索引刪除,更換為數(shù)字遞增。如下圖
#設(shè)置新索引 df=pd.DataFrame({'month':[1,4,7,10], 'year':[2012,2014,2013,2014], 'sale':[55,40,84,31]}) #以月份設(shè)置新的索引 df.set_index("month",drop=True)
#見(jiàn)下圖,即將原本數(shù)據(jù)中的一列拿出來(lái)作為index
new_df=df.set_index(["year","month"])#設(shè)置多個(gè)索引,以年和月份多個(gè)索引其實(shí)就是MultiIndex
可以看到下面的new_df已經(jīng)是multiIndex類(lèi)型數(shù)據(jù)了。
有三級(jí):indexindex.namesindex.levels
分別看各自的輸出
1.3MultiIndex與Panel
MultiIndex:多級(jí)或分層索引對(duì)象
Panel:
pandas.Panel(data=None,items=None,major_axis=None,minor_axis=None,copy=False,dtype=None)
存儲(chǔ)3維數(shù)組的Panel結(jié)構(gòu)
items-axis0,每個(gè)項(xiàng)目對(duì)應(yīng)于內(nèi)部包含的數(shù)據(jù)幀(DataFrame)。
major_axis-axis1,它是每個(gè)數(shù)據(jù)幀(DataFrame)的索引(行)。
minor_axis-axis2,它是每個(gè)數(shù)據(jù)幀(DataFrame)的列。
items-axis0,每個(gè)項(xiàng)目對(duì)應(yīng)于內(nèi)部包含的數(shù)據(jù)幀(DataFrame)。
major_axis-axis1,它是每個(gè)數(shù)據(jù)幀(DataFrame)的索引(行)。
minor_axis-axis2,它是每個(gè)數(shù)據(jù)幀(DataFrame)的列。
Pandas從版本0.20.0開(kāi)始棄用,推薦的用于表示3D數(shù)據(jù)的方法是DataFrame上的MultiIndex方法
1.4Series
帶索引的一維數(shù)組
index
values
#創(chuàng)建 pd.Series(np.arange(3,9,2),index=["a","b","c"]) #或 pd.Series({'red':100,'blue':200,'green':500,'yellow':1000}) sr=data.iloc[1,:] sr.index#索引 sr.values#值 #####就是從dataframe中抽出一行或一列來(lái)觀察 12345678910
2基本數(shù)據(jù)操作
2.1索引操作
data=pd.read_csv("./stock_day/stock_day.csv")#讀入文件的前5行表示如下
######利用drop刪除某些行列,需要利用axis告知函數(shù)是行索引還是列索引
data=data.drop(["ma5","ma10","ma20","v_ma5","v_ma10","v_ma20"],axis=1)#去掉一些不要的列
data["open"]["2018-02-26"]#直接索引,但需要遵循先列后行
#####按名字索引利用.loc函數(shù)可以不遵循列行先后關(guān)系
data.loc["2018-02-26"]["open"]#按名字索引
data.loc["2018-02-26","open"]
#####利用.iloc函數(shù)可以只利用數(shù)字進(jìn)行索引
data.iloc[1][0]#數(shù)字索引
data.iloc[1,0]
#組合索引
#獲取行第1天到第4天,['open','close','high','low']這個(gè)四個(gè)指標(biāo)的結(jié)果
data.ix[:4,['open','close','high','low']]#現(xiàn)在不推薦用了
###但仍可利用loc和iloc
data.loc[data.index[0:4],['open','close','high','low']]
data.iloc[0:4,data.columns.get_indexer(['open','close','high','low'])]
2.2賦值操作
data仍然是上圖類(lèi)型
data.open=100
data['open']=100
###兩種方式均可
data.iloc[1,0]=100
###找好索引即可
2.3排序
sort_values(比較values進(jìn)行排序)sort_index(比較行索引進(jìn)行排序,不行可以先轉(zhuǎn)置簡(jiǎn)介對(duì)列排序) data.sort_values(by="high",ascending=False)#DataFrame內(nèi)容排序,ascending表示升序還是降序,默認(rèn)True升序 data.sort_values(by=["high","p_change"],ascending=False).head()#多個(gè)列內(nèi)容排序。給出的優(yōu)先級(jí)進(jìn)行排序 data.sort_index(ascending=True)###對(duì)行索引進(jìn)行排序 #這里是取出了一列“price_change”列,為serise,用法同上 sr=data["price_change"] sr.sort_values(ascending=False) sr.sort_index()
2.4數(shù)學(xué)運(yùn)算
布爾值索引
算術(shù)運(yùn)算:直接利用運(yùn)算符或者函數(shù)
#正常的加減乘除等的運(yùn)算即可
data["open"]+3 data["open"].add(3)#open統(tǒng)一加3 data.sub(100)#所有統(tǒng)一減100data-100 (data["close"]-(data["open"])).head()#close減open 邏輯運(yùn)算:<;>;|;&利用邏輯符號(hào)或者函數(shù)query #例如篩選p_change>2的日期數(shù)據(jù) data[data["p_change"]>2].head() #完成一個(gè)多個(gè)邏輯判斷,篩選p_change>2并且low>15 data[(data["p_change"]>2)&(data["low"]>15)].head() data.query("p_change>2&low>15").head()###等效于上一行代碼 ###判斷#判斷'turnover'列索引中是否有4.19,2.39,將返回一列布爾值 data["turnover"].isin([4.19,2.39])##如下圖 利用布爾值索引,即利用一個(gè)布爾數(shù)組索引出True的數(shù)據(jù) ###判斷#判斷'turnover'列索引中是否有4.19,2.39,將返回一列布爾值 data["turnover"].isin([4.19,2.39])##如下圖 data[data["turnover"].isin([4.19,2.39])] #這塊就將返回turnover列布爾值為true的如下圖,也就是篩選出turnover中值為4.19和2.39
###布爾值索引是一個(gè)很方便的數(shù)據(jù)篩選操作,比如:
data[data["turnover"]>0.1]
#也將篩選出turnover列中大于0.1的整體data數(shù)據(jù),并不是說(shuō)只返回turnover相關(guān)數(shù)據(jù),判斷只是返回布爾索引,利用索引的是data數(shù)據(jù)
2.5統(tǒng)計(jì)運(yùn)算
data.describe()
#將返回關(guān)于列的最值,均值,方差等多種信息
##其實(shí)這里很多就和numpy相似了
data.max(axis=0)#返回最值
data.idxmax(axis=0)#返回最值索引
累計(jì)統(tǒng)計(jì)函數(shù)(累加,累乘等)
cumsum計(jì)算前1/2/3/…/n個(gè)數(shù)的和
cummax計(jì)算前1/2/3/…/n個(gè)數(shù)的最大值
cummin計(jì)算前1/2/3/…/n個(gè)數(shù)的最小值
cumprod計(jì)算前1/2/3/…/n個(gè)數(shù)的積
自定義運(yùn)算
apply(func,axis=0) func:自定義函數(shù) axis=0:默認(rèn)按列運(yùn)算,axis=1按行運(yùn)算 data.apply(lambdax:x.max()-x.min()) #這里的lambdax:x.max()-x.min()是lambda表達(dá)式,是函數(shù)的簡(jiǎn)單寫(xiě)法也可 deffx(data): returndata.max()-data.min()
3畫(huà)圖
3.1pandas.DataFrame.plot
x:labelorposition,defaultNone y:label,positionorlistoflabel,positions,defaultNone Allowsplottingofonecolumnversusanother kind:str ‘line’:lineplot(default) ''bar":verticalbarplot “barh”:horizontalbarplot “hist”:histogram “pie”:pieplot “scatter”:scatterplot #更簡(jiǎn)易用matplotlib data.plot(x="volume",y="turnover",kind="scatter") data.plot(x="high",y="low",kind="scatter") data['volume'].plot()
4文件讀取寫(xiě)入
4.1CSV文件
DataFrame.to_csv(path_or_buf=None,sep=','columns=None,header=True,index=True,index_label=None,mode='w',encoding=None)
1
path_or_buf:stringorfilehandle,defaultNone
sep:character,default‘,’(分隔符)
columns:sequence,optional
mode:'w‘:重寫(xiě),'a’追加
index:是否寫(xiě)入行索引
header:booleanorlistofstring,defaultTrue,是否寫(xiě)進(jìn)列索引值 Series.to_csv(path=None,index=True,sep=',',na_rep='',float_format=None,header=False,index_label=None,mode='w',encoding=None,compression=None,date_format=None,decimal='.) WriteSeriestoacomma-separatedvalues(csv)file pd.read_csv("./stock_day/stock_day.csv",usecols=["high","low","open","close"]).head()#讀哪些列 data=pd.read_csv("stock_day2.csv",names=["open","high","close","low","volume","price_change","p_change","ma5","ma10","ma20","v_ma5","v_ma10","v_ma20","turnover"])#如果列沒(méi)有列名,用names傳入 data[:10].to_csv("test.csv",columns=["open"])#保存open列數(shù)據(jù) data[:10].to_csv("test.csv",columns=["open"],index=False,mode="a",header=False)#保存opend列數(shù)據(jù),index=False不要行索引,mode="a"追加模式|mode="w"重寫(xiě),header=False不要列索引
4.2HDF5文件
read_hdfto_hdf
HDF5文件的讀取和存儲(chǔ)需要指定一個(gè)鍵,值為要存儲(chǔ)的DataFrame,也就是說(shuō)hdf5存儲(chǔ)的是panel這種三維類(lèi)型,一個(gè)key對(duì)應(yīng)一個(gè)dataframe
pandas.read_hdf(path_or_buf,key=None,**kwargs)
從h5文件當(dāng)中讀取數(shù)據(jù)
path_or_buffer:文件路徑
key:讀取的鍵
mode:打開(kāi)文件的模式
reurn:TheSelectedobject
DataFrame.to_hdf(path_or_buf,key,**kwargs)
day_close=pd.read_hdf("./stock_data/day/day_close.h5",key="close")
day_close.to_hdf("test.h5",key="close")
4.3JSON文件
read_jsonto_json
pandas.read_json(path_or_buf=None,orient=None,typ=“frame”,lines=False)
將JSON格式轉(zhuǎn)換成默認(rèn)的PandasDataFrame格式
orient:string,IndicationofexpectedJSONstringformat.
‘split’:dictlike{index->[index],columns->[columns],data->[values]}
‘records’:listlike[{column->value},…,{column->value}]
‘index’:dictlike{index->{column->value}}
‘columns’:dictlike{column->{index->value}},默認(rèn)該格式
‘values’:justthevaluesarray
lines:boolean,defaultFalse
按照每行讀取json對(duì)象
typ:default‘frame’,指定轉(zhuǎn)換成的對(duì)象類(lèi)型series或者dataframe
sa=pd.read_json("Sarcasm_Headlines_Dataset.json",orient="records",lines=True)
##主要是path,orient是一種確定索引與數(shù)值的對(duì)應(yīng),以本例來(lái)看,列索引就是‘key',values就是key對(duì)應(yīng)的值
sa.to_json("test.json",orient="records",lines=True)
5高級(jí)處理
5.1缺失值(標(biāo)記值)處理
主要參數(shù)
inplace實(shí)現(xiàn)數(shù)據(jù)替換(默認(rèn)為False)
dropna實(shí)現(xiàn)缺失值的刪除(默認(rèn)刪除行)
fillna實(shí)現(xiàn)缺失值的填充
isnull或notnull判斷是否有缺失數(shù)據(jù)NaN
如何進(jìn)行缺失值處理?
刪除含有缺失值的樣本
替換/插補(bǔ)數(shù)據(jù)
判斷NaN是否存在
pd.isnull(df)會(huì)返回整個(gè)dataframe的布爾框架,難以觀察(bool為T(mén)rue代表那個(gè)位置是缺失值)
pd.isnull(df).any()表示只要有一個(gè)True就返回True
pd.notnull(df)會(huì)返回整個(gè)dataframe的布爾框架,難以觀察(bool為False代表那個(gè)位置是缺失值)
pd.notnull(df).all()表示只要有一個(gè)False就返回False
刪除nan數(shù)據(jù)
df.dropna(inplace=True)默認(rèn)按行刪除inplace:True修改原數(shù)據(jù),F(xiàn)alse返回新數(shù)據(jù),默認(rèn)False
替換nan數(shù)據(jù)
df.fillna(value,inplace=True)
value替換的值
inplace:True修改原數(shù)據(jù),F(xiàn)alse返回新數(shù)據(jù),默認(rèn)False
movie["Revenue(Millions)"].fillna(movie["Revenue(Millions)"].mean(),inplace=True)
###這就是先利用其他代碼判斷出"Revenue(Millions)"有nan數(shù)據(jù),然后利用.fillna函數(shù),令value=movie["Revenue(Millions)"].mean()列的均值,然后inplace=True修改原數(shù)據(jù)
importpandasaspd
importnumpyasnp
movie=pd.read_csv("./IMDB/IMDB-Movie-Data.csv")
#1)判斷是否存在NaN類(lèi)型的缺失值
np.any(pd.isnull(movie))#返回True,說(shuō)明數(shù)據(jù)中存在缺失值 np.all(pd.notnull(movie))#返回False,說(shuō)明數(shù)據(jù)中存在缺失值 pd.isnull(movie).any() pd.notnull(movie).all() #2)缺失值處理 #方法1:刪除含有缺失值的樣本 data1=movie.dropna() pd.notnull(data1).all() #方法2:替換 #含有缺失值的字段 #Revenue(Millions) #Metascore movie["Revenue(Millions)"].fillna(movie["Revenue(Millions)"].mean(),inplace=True) movie["Metascore"].fillna(movie["Metascore"].mean(),inplace=True) 替換非nan的標(biāo)記數(shù)據(jù) 有些數(shù)據(jù)不存在可能標(biāo)記為“#”,“?”等 #讀取數(shù)據(jù) path="wisconsin.data" name=["Samplecodenumber","NormalNucleoli","Mitoses","Class"] data=pd.read_csv(path,names=name)
#這里的非nan標(biāo)記值缺失值就是利用“?”表示的,因此利用參數(shù)to_replace,value=np.nan,將默認(rèn)標(biāo)記值替換為nan值,然后再利用簽署方法處理nan缺失值
#1)替換
data_new=data.replace(to_replace="?",value=np.nan)
5.2離散化
這一塊建議去看視頻,理解更快:視頻地址
連續(xù)屬性的離散化就是將連續(xù)屬性的值域上,將值域劃分為若干個(gè)離散的區(qū)間,最后用不同的符號(hào)或整數(shù)值代表落在每個(gè)子區(qū)間的屬性值。
連續(xù)屬性離散化的目的是為了簡(jiǎn)化數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)離散化技術(shù)可以用來(lái)減少給定連續(xù)屬性值的個(gè)數(shù)。離散化方法經(jīng)常作為數(shù)據(jù)挖掘的工具。
實(shí)現(xiàn)方法:
1.分組
自動(dòng)分組sr=pd.qcut(data,bins)
自定義分組sr=pd.cut(data,[])
2.將分組好的結(jié)果轉(zhuǎn)換成one-hot編碼(啞變量)
pd.get_dummies(sr,prefix=)
one-hot編碼:
one-hot
比如男女?dāng)?shù)據(jù)一般用1和0表示,但1和0本身有大小問(wèn)題,而男女只是不同的概念,因此用1,0表示會(huì)存在區(qū)別
同時(shí)還可處理連續(xù)數(shù)據(jù),比如將身高的連續(xù)數(shù)據(jù)分為不同的身高區(qū)間,每個(gè)區(qū)間對(duì)應(yīng)一個(gè)類(lèi)別,然后類(lèi)比同上來(lái)考慮
#1)準(zhǔn)備數(shù)據(jù)
data=pd.Series([165,174,160,180,159,163,192,184],index=['No1:165','No2:174','No3:160','No4:180','No5:159','No6:163','No7:192','No8:184'])
#2)分組
#自動(dòng)分組
sr=pd.qcut(data,3)
sr.value_counts()#看每一組有幾個(gè)數(shù)據(jù)
#3)轉(zhuǎn)換成one-hot編碼
pd.get_dummies(sr,prefix="height")
#自定義分組
bins=[150,165,180,195]#這就表示有三組[150,165][165,180][180,195]
sr=pd.cut(data,bins)
#get_dummies
pd.get_dummies(sr,prefix="身高")
5.3合并
指合并不同dataframe上的內(nèi)容數(shù)據(jù)
按方向
pd.concat([data1,data2],axis=1)
#axis:0為列索引;1為行索引
按索引
left=pd.DataFrame({'key1':['K0','K0','K1','K2'], 'key2':['K0','K1','K0','K1'], 'A':['A0','A1','A2','A3'], 'B':['B0','B1','B2','B3']}) right=pd.DataFrame({'key1':['K0','K1','K1','K2'], 'key2':['K0','K0','K0','K0'], 'C':['C0','C1','C2','C3'], 'D':['D0','D1','D2','D3']}) pd.merge(left,right,how="inner",on=["key1","key2"]) pd.merge(left,right,how="left",on=["key1","key2"]) pd.merge(left,right,how="outer",on=["key1","key2"]) ###這里merge參數(shù)解釋?zhuān)? #left:需要合并的一個(gè)表,合并后在左側(cè) #right:需要合并的一個(gè)表,合并后在右側(cè) #how:合并方式
#on:在哪些索引上進(jìn)行合并
5.4交叉表與透視表
交叉表
交叉表用于計(jì)算一列數(shù)據(jù)對(duì)于另外一列數(shù)據(jù)的分組個(gè)數(shù)(尋找兩個(gè)列之間的關(guān)系)
pd.crosstab(value1,value2)
data=pd.crosstab(stock["week"],stock["pona"])
data.div(data.sum(axis=1),axis=0).plot(kind="bar",stacked=True)
透視表
相對(duì)于交叉表操作簡(jiǎn)單些
#透視表操作
stock.pivot_table(["pona"],index=["week"])
5.5分組與聚合
分組與聚合通常是分析數(shù)據(jù)的一種方式,通常與一些統(tǒng)計(jì)函數(shù)一起使用,查看數(shù)據(jù)的分組情況。
DataFrame.groupby(key,as_index=False)key:分組的列數(shù)據(jù),可以多個(gè) col=pd.DataFrame({'color':['white','red','green','red','green'],'object':['pen','pencil','pencil','ashtray','pen'],'price1':[5.56,4.20,1.30,0.56,2.75],'price2':[4.75,4.12,1.60,0.75,3.15]})
#進(jìn)行分組,對(duì)顏色分組,price1進(jìn)行聚合
#用dataframe的方法進(jìn)行分組
col.groupby(by="color")
#或者用Series的方法進(jìn)行分組聚合
col["price1"].groupby(col["color"])
6案例
要求
想知道這些電影數(shù)據(jù)中評(píng)分的平均分,導(dǎo)演的人數(shù)等信息,我們應(yīng)該怎么獲取?
對(duì)于這一組電影數(shù)據(jù),如果我們想看Rating,Runtime(Minutes)的分布情況,應(yīng)該如何呈現(xiàn)數(shù)據(jù)?
對(duì)于這一組電影數(shù)據(jù),如果我們希望統(tǒng)計(jì)電影分類(lèi)(genre)的情況,應(yīng)該如何
處理數(shù)據(jù)?
數(shù)據(jù)結(jié)構(gòu)展示
代碼
#1、準(zhǔn)備數(shù)據(jù)
movie=pd.read_csv("./IMDB/IMDB-Movie-Data.csv")
###movie讀入后如上圖所示
######################問(wèn)題一
#問(wèn)題1:我們想知道這些電影數(shù)據(jù)中評(píng)分的平均分,導(dǎo)演的人數(shù)等信息,我們應(yīng)該怎么獲取?
#評(píng)分的平均分
movie["Rating"].mean()
#導(dǎo)演的人數(shù)
np.unique(movie["Director"]).size
######################問(wèn)題二
##繪制直方圖查看分布
movie["Rating"].plot(kind="hist",figsize=(20,8))
#利用matplotlib可更細(xì)致繪圖
importmatplotlib.pyplotasplt
#1、創(chuàng)建畫(huà)布
plt.figure(figsize=(20,8),dpi=80)
#2、繪制直方圖
plt.hist(movie["Rating"],20)
#修改刻度
plt.xticks(np.linspace(movie["Rating"].min(),movie["Rating"].max(),21))
#添加網(wǎng)格
plt.grid(linestyle="--",alpha=0.5)
#3、顯示圖像
plt.show()
######################問(wèn)題三
##如果我們希望統(tǒng)計(jì)電影分類(lèi)(genre)的情況,應(yīng)該如何處理數(shù)據(jù)?
###可以發(fā)現(xiàn)圖中g(shù)enre一列數(shù)據(jù)中每個(gè)電影都有多種標(biāo)簽,因此要先分割
#先統(tǒng)計(jì)電影類(lèi)別都有哪些
movie_genre=[i.split(",")foriinmovie["Genre"]]
###得到的movie_genre結(jié)構(gòu)圖見(jiàn)《下圖一》
###這一塊主要是把movie_genre的二維列表變?yōu)橐詾榱斜恚缓罄胾nique函數(shù)去重
movie_class=np.unique([jforiinmovie_genreforjini])
len(movie_class)####這就得到了電影的類(lèi)型標(biāo)簽種類(lèi)數(shù)
#統(tǒng)計(jì)每個(gè)類(lèi)別有幾個(gè)電影
count=pd.DataFrame(np.zeros(shape=[1000,20],dtype="int32"),columns=movie_class)
count.head()###得到的count結(jié)構(gòu)如《下圖二》
#計(jì)數(shù)填表
foriinrange(1000):
count.ix[i,movie_genre[i]]=1###注意ix現(xiàn)在不太能用了
############movie_genre[i]將返回字符索引列
#這就得到了下面第三張圖片的數(shù)據(jù)處理效果,列表示電影類(lèi)型種類(lèi),行表示不同電影,如《下圖三》
#因此只需逐列求和即可得到每類(lèi)標(biāo)簽電影的數(shù)量
##最終實(shí)現(xiàn)數(shù)據(jù)可視化如《下圖四》
count.sum(axis=0).sort_values(ascending=False).plot(kind="bar",figsize=(20,9),fontsize=40,colormap="cool")
綜上所述,小編就為大家介紹到這里了,希望可以給大家?guī)?lái)幫助
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/127840.html
小編寫(xiě)這篇文章的一個(gè)主要目的,主要是給大家去做一個(gè)解答,解答的內(nèi)容主要是Python相關(guān)知識(shí),比如說(shuō),會(huì)給大家講解怎么樣去利用Python pandas去做一個(gè)讀取,讀取的是csv數(shù)據(jù),然后將這些數(shù)據(jù)去做一個(gè)繪圖處理,具體內(nèi)容下面給大家詳細(xì)解答。 如何利用pandas讀取csv數(shù)據(jù)并繪圖 導(dǎo)包,常用的numpy和pandas,繪圖模塊matplotlib, importmatplotli...
csv文件其實(shí)就是單純的儲(chǔ)存文本數(shù)據(jù)的一種形式,那么,在日常的辦公當(dāng)中,要怎么做去提高其辦公的效率呢?比如,如何使用Python去批量的進(jìn)行處理文件,批量的處理csv文件,怎么將編碼轉(zhuǎn)換成為YTF-8的形式呢?下面給大家詳細(xì)的解答下。 當(dāng)我們用pandas是操作CSV文件的時(shí)候,常常會(huì)因?yàn)榫幋a問(wèn)題出現(xiàn)報(bào)錯(cuò)。 pandas_libsparsers.pyx in pandas._libs.pa...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02