數(shù)據(jù)分析實(shí)戰(zhàn)05

Python科學(xué)計(jì)算:Pandas

一概页、Series:一維的序列

1.Series 是個(gè)定長的字典序列(就是縱向表示序號和內(nèi)容)

2.Series有兩個(gè)基本屬性:index 和 values嫡锌。在 Series 結(jié)構(gòu)中凌受,index 默認(rèn)是 0,1,2,增的整數(shù)序列虱痕,

當(dāng)然我們也可以自己來指定索引齿桃,比如 index=[‘a(chǎn)’, ‘b’, ‘c’, ‘d’]惠窄。

import pandas as pd

from pandas import Series, DataFrame

x1 = Series([1,2,3,4])

x2 = Series(data=[1,2,3,4], index=['a', 'b', 'c', 'd'])

print x1

print x2

3.也可以采用字典的形式進(jìn)行創(chuàng)建

d = {'a':1, 'b':2, 'c':3, 'd':4}

x3 = Series(d)

print x3

二谅辣、DataFrame:二維的表結(jié)構(gòu)

1.DataFrame 類型數(shù)據(jù)結(jié)構(gòu)類似數(shù)據(jù)庫表,它包括了行索引和列索引。

import pandas as pd

from pandas import Series, DataFrame

data = {'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'+'

'Math': [30, 98, 96, 77, 90]}

df1= DataFrame(data)

df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'],'+'

columns=['English', 'Math', 'Chinese'])

print df1

print df2

2.數(shù)據(jù)導(dǎo)入和輸出:

import pandas as pd

from pandas import Series, DataFrame

score = DataFrame(pd.read_excel('data.xlsx')) #讀取數(shù)據(jù)

score.to_excel('data1.xlsx') #輸出數(shù)據(jù)

print score

3.數(shù)據(jù)清洗:

3.1 刪除DataFrame中不必要的列或者行

@ 使用drop()函數(shù)

df2 = df2.drop(columns=['Chinese']) #刪除chinses列

df2 = df2.drop(index=['ZhangFei']) #刪除zhangfei行

3.2 重命名列名columns前翎,讓列表名更容易識別:

@ 使用 rename()函數(shù)

df2.rename(columns={'Chinese': 'YuWen', 'English': 'Yingyu'}, inplace = True)

3.3 去重復(fù)值:

@ drop_duplicates()函數(shù)

df = df.drop_duplicates() # 去除重復(fù)行

4 格式問題:

4.1 更改數(shù)據(jù)格式:

@ 使用astype()函數(shù)來更改格式

df2['Chinese'].astype('str')

df2['Chinese'].astype(np.int64)

4.2 數(shù)據(jù)間的空格

@ 使用strip()刪除多余空格

# 刪除左右兩邊空格

df2['Chinese']=df2['Chinese'].map(str.strip)

# 刪除左邊空格

df2['Chinese']=df2['Chinese'].map(str.lstrip)

# 刪除右邊空格

df2['Chinese']=df2['Chinese'].map(str.rstrip)

4.3 大小寫轉(zhuǎn)換

@ upper(), lower(), title() 函數(shù)

# 全部大寫

df2.columns = df2.columns.str.upper()

# 全部小寫

df2.columns = df2.columns.str.lower()

# 首字母大寫

df2.columns = df2.columns.str.title()

4.4 查找空值

@ 使用 isnull()函數(shù)

df.isnull().any() #哪列出現(xiàn)空值

三稚配、使用 apply 函數(shù)對數(shù)據(jù)進(jìn)行清洗

1.name數(shù)列的數(shù)值都進(jìn)行大寫轉(zhuǎn)化

df['name'] = df['name'].apply(str.upper)

2.我們也可以定義個(gè)函數(shù),在 apply 中進(jìn)行使用鱼填。比如定義double_df 函數(shù)是將原來的數(shù)值 *2 進(jìn)行返回。然后

對 df1 中的“語文”列的數(shù)值進(jìn)行 *2 處理毅戈,可以寫成

def double_df(x):

? ? ? ? ? return 2*x

df1[u'語文'] = df1[u'語文'].apply(double_df)

3.比如對于 DataFrame苹丸,我們新增兩列,其中’new1’列是“語文”和“英語”成績之和的 m 倍苇经,'new2’列是“

“語文”和“英語”成績之和的 n 倍赘理,我們可以這樣寫:

@ 其中 axis=1 代表按照列為軸進(jìn)行操作,axis=0 代表按照行為軸進(jìn)行操作扇单,args 是傳遞的兩個(gè)參數(shù)商模,

即 n=2, m=3,在 plus 函數(shù)中使用到了 n 和 m蜘澜,從而生成新的df.

def plus(df,n,m):

? ? df['new1'] = (df[u'語文']+df[u'英語']) * m

? ? df['new2'] = (df[u'語文']+df[u'英語']) * n

? ? return df

df1 = df1.apply(plus,axis=1,args=(2,3,))

四施流、數(shù)據(jù)統(tǒng)計(jì)

1.表格中有一個(gè) describe() 函數(shù),統(tǒng)計(jì)函數(shù)千千萬鄙信,describe() 函數(shù)最簡便

df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})

print df1.describe()

五瞪醋、數(shù)據(jù)表合并

@ 創(chuàng)建兩個(gè)DataFrame

df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})

df2 = DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})

1.基于指定列進(jìn)行連接

df3 = pd.merge(df1, df2, on='name')

2.inner內(nèi)連接

@ inner 內(nèi)鏈接是 merge 合并的默認(rèn)情況,inner內(nèi)連接其實(shí)也就是鍵的交集装诡,在這里 df1, df2 相同的

鍵是 name银受,所以是基于 name 字段做的連接:

df3 = pd.merge(df1, df2, how='inner')

3.left 左連接

@ 左連接是以第一個(gè) DataFrame 為主進(jìn)行的連接践盼,第二個(gè)DataFrame 作為補(bǔ)充。

df3 = pd.merge(df1, df2, how='left')

4.right 右連接

@ 右連接是以第二個(gè) DataFrame 為主進(jìn)行的連接宾巍,第一個(gè)DataFrame 作為補(bǔ)充咕幻。

df3 = pd.merge(df1, df2, how='right')

5.outer 外連接

@ 外連接相當(dāng)于求兩個(gè) DataFrame 的并集。

df3 = pd.merge(df1, df2, how='outer')

六顶霞、如何用sql方式打開pandas

1.pandasql 中的主要函數(shù)是 sqldf肄程,它接收兩個(gè)參數(shù):一個(gè) SQL 查詢語句,還有一組環(huán)境變量 globals

() 或 locals()确丢。這樣我們就可以在 Python 里绷耍,直接用 SQL 語句中對 DataFrame 進(jìn)行操作,

import pandas as pd

from pandas import DataFrame

from pandasql import sqldf, load_meat, load_births

df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})

pysqldf = lambda sql: sqldf(sql, globals())

sql = "select * from df1 where name ='ZhangFei'"

print pysqldf(sql)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鲜侥,一起剝皮案震驚了整個(gè)濱河市褂始,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌描函,老刑警劉巖崎苗,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舀寓,居然都是意外死亡胆数,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門互墓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來必尼,“玉大人,你說我怎么就攤上這事篡撵∨欣颍” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵育谬,是天一觀的道長券盅。 經(jīng)常有香客問我,道長膛檀,這世上最難降的妖魔是什么锰镀? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮咖刃,結(jié)果婚禮上泳炉,老公的妹妹穿的比我還像新娘。我一直安慰自己嚎杨,他們只是感情好胡桃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著磕潮,像睡著了一般翠胰。 火紅的嫁衣襯著肌膚如雪容贝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天之景,我揣著相機(jī)與錄音斤富,去河邊找鬼。 笑死锻狗,一個(gè)胖子當(dāng)著我的面吹牛满力,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播轻纪,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼油额,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刻帚?” 一聲冷哼從身側(cè)響起潦嘶,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崇众,沒想到半個(gè)月后掂僵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顷歌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年锰蓬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眯漩。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芹扭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赦抖,到底是詐尸還是另有隱情舱卡,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布摹芙,位于F島的核電站灼狰,受9級特大地震影響宛瞄,放射性物質(zhì)發(fā)生泄漏浮禾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一份汗、第九天 我趴在偏房一處隱蔽的房頂上張望盈电。 院中可真熱鬧,春花似錦杯活、人聲如沸匆帚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吸重。三九已至互拾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嚎幸,已是汗流浹背颜矿。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嫉晶,地道東北人骑疆。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像替废,于是被迫代替她去往敵國和親箍铭。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容