05丨Python科學計算:Pandas

數(shù)據(jù)結(jié)構(gòu):Series 和 DataFrame

一維的序列和二維的表結(jié)構(gòu)

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'])? ? ? ? #兩個特性里伯,value和index辕狰,index默認為0,1,2,3

print (x1)

print (x2)

d = {'a':1, 'b':2, 'c':3, 'd':4}? ? ? ? #用字典的方法創(chuàng)建series

x3 = Series(d)

print (x3)

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)

數(shù)據(jù)導入和輸出

import pandas as pd

from pandas import Series, DataFrame

score = DataFrame(pd.read_excel('Desktop\data.xls'))? ? #windows不要用絕對路徑漾稀,用相對路徑

score.to_excel('Desktop\data.xls')

print (score)

在運行的過程可能會存在缺少 xlrd 和 openpyxl 包的情況头滔,到時候如果缺少了,可以在命令行模式下使用“pip install”命令來進行安裝腹缩。

數(shù)據(jù)清洗

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

data = {'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'Math': [30, 98, 96, 77, 90]}

df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])

df2 = df2.drop(columns=['Chinese'])

df2 = df2.drop(index=['ZhangFei'])

重命名列名 columns鹃愤,讓列表名更容易識別

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

去重復的值

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

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

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

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

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

# 刪除左右兩邊空格

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

?# 刪除左邊空格

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

?# 刪除右邊空格

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

#刪除特殊符號,$

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

大小寫轉(zhuǎn)換

# 全部大寫

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

# 全部小寫

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

# 首字母大寫

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

查找空值

用isnull函數(shù)峦甩,想看下哪個地方存在空值 NaN,可以針對數(shù)據(jù)表 df 進行 df.isnull()现喳,想知道哪列存在空值凯傲,可以使用 df.isnull().any()。

使用 apply 函數(shù)對數(shù)據(jù)進行清洗

df['name'] = df['name'].apply(str.upper)? ?#對 name 列的數(shù)值都進行大寫轉(zhuǎn)化

我們也可以定義個函數(shù)嗦篱,在 apply 中進行使用冰单。比如定義 double_df 函數(shù)是將原來的數(shù)值 *2 進行返回。然后對 df1 中的“語文”列的數(shù)值進行 *2 處理灸促,可以寫成:

def double_df(x):?

????return 2*x

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

我們也可以定義更復雜的函數(shù)诫欠,比如對于 DataFrame涵卵,我們新增兩列,其中’new1’列是“語文”和“英語”成績之和的 m 倍荒叼,'new2’列是“語文”和“英語”成績之和的 n倍轿偎,我們可以這樣寫:

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,))? ? #axis=1 代表按照列為軸進行操作,axis=0 代表按照行為軸進行操作被廓,args 是傳遞的

????????????????????????????????????????????????????????????????????兩個參數(shù)坏晦,即 n=2, m=3

數(shù)據(jù)統(tǒng)計

Pandas中常用的統(tǒng)計函數(shù)

describe()函數(shù)是一個大禮包,會輸出cout mean std min max 25% 50%〖蕹恕75%
df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})

print? (df1.describe())

數(shù)據(jù)表合并

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

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

數(shù)據(jù)表合并用merge()昆婿,有五種形式

基于指定列進行連接

df3 = pd.merge(df1, df2, on='name')? #基于 name 這列進行連接,把name這列亦渗,相同的整合到df3中

inner 內(nèi)連接

df3 = pd.merge(df1, df2, how='inner')? ?#inner 內(nèi)鏈接是 merge 合并的默認情況挖诸,inner 內(nèi)連接其實也就是鍵的交集,在這里 df1,

????????????????????????????????????????????????????????????????df2 相同的鍵是 name法精,所以是基于 name 字段做的連接

left 左連接

df3 = pd.merge(df1, df2, how='left')? ?#左連接是以第一個 DataFrame 為主進行的連接多律,第二個 DataFrame 作為補充。

left 左連接

right 右連接

df3 = pd.merge(df1, df2, how='right')? ?#右連接是以第二個 DataFrame 為主進行的連接搂蜓,第一個 DataFrame 作為補充狼荞。

outer 外連接

df3 = pd.merge(df1, df2, how='outer')? #外連接相當于求兩個 DataFrame 的并集。?

如何用 SQL 方式打開 Pandas?

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 ='a'"

print (pysqldf(sql))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帮碰,一起剝皮案震驚了整個濱河市相味,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌殉挽,老刑警劉巖丰涉,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異斯碌,居然都是意外死亡一死,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門傻唾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來投慈,“玉大人,你說我怎么就攤上這事冠骄∥泵海” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵凛辣,是天一觀的道長抱既。 經(jīng)常有香客問我,道長扁誓,這世上最難降的妖魔是什么蝙砌? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任阳堕,我火速辦了婚禮跋理,結(jié)果婚禮上择克,老公的妹妹穿的比我還像新娘。我一直安慰自己前普,他們只是感情好肚邢,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拭卿,像睡著了一般骡湖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上峻厚,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天响蕴,我揣著相機與錄音,去河邊找鬼惠桃。 笑死浦夷,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的辜王。 我是一名探鬼主播劈狐,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呐馆!你這毒婦竟也來了肥缔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤汹来,失蹤者是張志新(化名)和其女友劉穎续膳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體收班,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡坟岔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了闺阱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炮车。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖酣溃,靈堂內(nèi)的尸體忽然破棺而出瘦穆,到底是詐尸還是另有隱情,我是刑警寧澤赊豌,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布扛或,位于F島的核電站,受9級特大地震影響碘饼,放射性物質(zhì)發(fā)生泄漏熙兔。R本人自食惡果不足惜悲伶,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望住涉。 院中可真熱鬧麸锉,春花似錦、人聲如沸舆声。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媳握。三九已至碱屁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛾找,已是汗流浹背娩脾。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留打毛,地道東北人柿赊。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像隘冲,于是被迫代替她去往敵國和親闹瞧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

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