#Python小組第四期3組第二次學(xué)習(xí)總結(jié)#

[TOC]

第四章 數(shù)據(jù)處理

課時(shí)9 數(shù)據(jù)導(dǎo)入

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

  • csv
  • excel
  • txt

pandas

csv

from pandas import read_csv

excel

  • xls
  • xlsx

需要提前安裝package.name = xlrd, 但是不用import

from pandas import read_excel

txt

from pandas import read_table

  • 英文
  • 中文
df = read_table(
    filePath, 
    sep=',', 
    encoding='UTF-8', 
    engine='python'
)

注意代碼中的

engine='python'

課時(shí)10 數(shù)據(jù)導(dǎo)出

  • to_csv
to_csv(filePath, sep=",",index=TRUE, header= TRUE)

index=false
導(dǎo)出無(wú)序號(hào)

課時(shí)11 重復(fù)值處理

  • duplicated
  • drop_dublicates
df = read_csv('data.csv')

#找出行重復(fù)的位置
dIndex = df.duplicated()

dIndex = df.duplicated('id')

dIndex = df.duplicated(['id', 'key'])

#刪除重復(fù)值
newDF = df.drop_duplicates()

newDF = df.drop_duplicates('id')

可以對(duì)特定列去重

課時(shí)12 缺失值處理

缺失值的產(chǎn)生原因

  • 無(wú)法獲取
  • 遺漏或錯(cuò)誤處理

處理方式

  • 補(bǔ)齊
  • 丟棄

dropna()

  • 保留默赂,不處理

#找出空值的位置
isNA = df.isnull()


#獲取出空值所在的行
df[isNA.any(axis=1)]

df[isNA[['key']].any(axis=1)]

df[isNA[['key', 'value']].any(axis=1)]

df.fillna('未知')

#直接刪除空值
newDF = df.dropna()

課時(shí)13 空格值處理

  • strip()

空格值處理

newName = df['name'].str.lstrip()

newName = df['name'].str.rstrip()

newName = df['name'].str.strip()

df['name'] = newName

課時(shí)14 字段抽取

  • slice(start, stop)
df['tel'] = df['tel'].astype(str)
# 注意數(shù)字的字符串轉(zhuǎn)換
bands = df['tel'].str.slice(0, 3)

注意start<=x<stop

課時(shí)15 字段拆分

  • split(sep,n,expand=False)
    • sep 用于分割的字符串
    • n 分割為多少列
    • expand 是否展開(kāi)為數(shù)據(jù)框春贸,默認(rèn)=False
  • True: DataFrame
  • False: Series
newDF1 = df['name'].str.split(' ', 1, False)

newDF = df['name'].str.split(' ', 1, True)

newDF.columns = ['band', 'name']

課時(shí)16 記錄抽取

  • dataframe[condition]
    • 比較 邏輯:<, >, <=, >=, !=
    • 范圍 between
    • 空值匹配
    • 字符匹配 patten
    • 組合邏輯 ~ & |
#單條件
df[df.comments>10000]

#多條件
df[df.comments.between(1000, 10000)]

#過(guò)濾空值所在行
df[pandas.isnull(df.title)]

#根據(jù)關(guān)鍵字過(guò)濾
df[df.title.str.contains('臺(tái)電', na=False)]

#~為取反
df[~df.title.str.contains('臺(tái)電', na=False)]

#組合邏輯條件
df[(df.comments>=1000) & (df.comments<=10000)]

課時(shí)17 隨機(jī)抽樣

  • DataFrame.sample(n,frac,replace=False)
    • n: 個(gè)數(shù)
    • frac:
  • replace 是否放回抽樣,F(xiàn)alse 不可放回
#設(shè)置隨機(jī)種子
numpy.random.seed(seed=2)


#按照個(gè)數(shù)抽樣
data.sample(n=10)
#按照百分比抽樣
data.sample(frac=0.05)
#是否可放回抽樣久窟,
#replace=True,可放回, 
#replace=False蔼两,不可放回
data.sample(n=10, replace=True)


#典型抽樣酝枢,分層抽樣
gbr = data.groupby("class")
gbr.groups


typicalNDict = {
    1: 2, 
    2: 4, 
    3: 6
}

typicalNDict[3]

def typicalSampling(group, typicalNDict):
    name = group.name
    n = typicalNDict[name]
    return group.sample(n=n)

result = data.groupby(
    'class', group_keys=False
).apply(typicalSampling, typicalNDict)

typicalFracDict = {
    1: 0.2, 
    2: 0.4, 
    3: 0.6
}

def typicalSampling(group, typicalFracDict):
    name = group.name
    frac = typicalFracDict[name]
    return group.sample(frac=frac)

result = data.groupby(
    'class', group_keys=False
).apply(typicalSampling, typicalFracDict)

課時(shí)18 合并數(shù)據(jù)

  • concat

材料里面代碼有問(wèn)題,datai的col有問(wèn)題瓢剿,可能是python版本問(wèn)題

datab = pandas.concat([
    data1[['id','comments']], 
    data2[['comments','title']], 
    data3[['id','title']]
])

課時(shí)19 字段合并

  • + 連接字符

列的添加
新列賦值即可

課時(shí)20 字段匹配

  • merge(x,y,left_on, right_on)
  • 默認(rèn)內(nèi)連接
  • 左連接how='left'
  • 右連接how='right'
  • 外連接how='outer'
#默認(rèn)只是保留連接上的部分
itemPrices = pandas.merge(
    items, 
    prices, 
    left_on='id', 
    right_on='id'
)

#即使連接不上逢慌,也保留左邊沒(méi)連上的部分
itemPrices = pandas.merge(
    items, 
    prices, 
    left_on='id', 
    right_on='id',
    how='left'
)

#即使連接不上,也保留右邊沒(méi)連上的部分
itemPrices = pandas.merge(
    items, 
    prices, 
    left_on='id', 
    right_on='id',
    how='right'
)

#即使連接不上间狂,也保留所有沒(méi)連上的部分
itemPrices = pandas.merge(
    items, 
    prices, 
    left_on='id', 
    right_on='id',
    how='outer'
)

課時(shí)21 簡(jiǎn)單計(jì)算

  • 已有字段->新字段

注意data.total并不能實(shí)現(xiàn)賦值

data['total'] = data.price*data.num
#注意攻泼,用點(diǎn)的方式,雖然可以訪(fǎng)問(wèn)鉴象,但是并沒(méi)有組合進(jìn)數(shù)據(jù)框中
data.total = data.price*data.num

課時(shí)22 數(shù)據(jù)標(biāo)準(zhǔn)化

  • 去量綱
  • 0-1 標(biāo)準(zhǔn)化
x^{*} = \frac{x-x_{min}}{x_{max}-x_{min}}
data['scale'] = round(
    (
        data.score-data.score.min()
    )/(
        data.score.max()-data.score.min()
    )
    , 2
)
# 保留兩位小數(shù)

課時(shí)23 數(shù)據(jù)分組

  • 分組數(shù)據(jù)所屬區(qū)間忙菠,類(lèi)比excel的vlookup最后一個(gè)參數(shù)取值為1
cut(series, bins,right=True, labels=NULL)
# series 分組對(duì)象
# bins 所屬分組
# True 左開(kāi)右閉, False 左閉右開(kāi)纺弊;比excel方便牛欢,不用delta值
# 分組標(biāo)簽自定義

課時(shí)24 時(shí)間處理

  • 字符型的時(shí)間格式數(shù)據(jù)轉(zhuǎn)換成為時(shí)間型
datetime=pandas.to_datetime(dateString, format);
# %Y year
# %m month
# %d day
# %H hour
# %M minute
# %S second
datetime.dt.property
# year, month, hour, weekday, day, hour, minute, second
# weekday: 0-6 對(duì)應(yīng)周一-周日

課時(shí)25 時(shí)間抽取

  • 時(shí)間條件
    • 索引
# 將dataframe的索引要設(shè)置為日期對(duì)應(yīng)的字段
DataFrame.ix[start:end]
DataFrame.ix[dates]

#注意lambda函數(shù)的使用
dateparse = lambda dates: pandas.datetime.strptime(
    dates, '%Y%m%d'
)
#抽取切片
data.ix[dt1: dt2]
#取值
data.ix[[dt1,dt2]]
    • 時(shí)間列
DataFrame[condition]
data[(data.date>=dt1) & (data.date<=dt2)]

課時(shí)26 虛擬變量

  • 啞變量、離散特征變量淆游,用于表示分類(lèi)變量傍睹、非數(shù)量隔盛、序列因素
  • 尺寸
  • 顏色
  • 地區(qū)
# pandas.Series.map(dict) dict中數(shù)值大小有意義
data['Education Level Map'] = data[
    'Education Level'
].map(
    educationLevelDict
)
# pandas.get_dummies(data, prefix=None,prefix_sep='_',dummy_na=False,columns=None,drop_first=False)
# data DataFrame對(duì)象
# prefix 列名前綴
# prefix_sep 前綴與值的分隔符
# dummy_na NA值處理方式
# columns 處理目標(biāo)列名
# drop_first 是否刪第一個(gè),建模的時(shí)候避免共線(xiàn)性使用
  • 關(guān)于drop_first,是否是標(biāo)準(zhǔn)差用$\frac{1}{n-1}$而不是$\frac{1}{n}$

get_dummies vs map
前者分拆變量的選擇值為多列焰望,由0,1表示
后者將變量所在列映射為不同的編碼值


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骚亿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子熊赖,更是在濱河造成了極大的恐慌来屠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件震鹉,死亡現(xiàn)場(chǎng)離奇詭異俱笛,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)传趾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)迎膜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人浆兰,你說(shuō)我怎么就攤上這事磕仅。” “怎么了簸呈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵榕订,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蜕便,道長(zhǎng)劫恒,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任轿腺,我火速辦了婚禮两嘴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘族壳。我一直安慰自己憔辫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布仿荆。 她就那樣靜靜地躺著螺垢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赖歌。 梳的紋絲不亂的頭發(fā)上枉圃,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音庐冯,去河邊找鬼孽亲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛展父,可吹牛的內(nèi)容都是我干的返劲。 我是一名探鬼主播玲昧,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼篮绿!你這毒婦竟也來(lái)了孵延?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤亲配,失蹤者是張志新(化名)和其女友劉穎尘应,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吼虎,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡犬钢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了思灰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玷犹。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖洒疚,靈堂內(nèi)的尸體忽然破棺而出歹颓,到底是詐尸還是另有隱情,我是刑警寧澤油湖,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布巍扛,位于F島的核電站,受9級(jí)特大地震影響肺魁,放射性物質(zhì)發(fā)生泄漏电湘。R本人自食惡果不足惜隔节,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一鹅经、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怎诫,春花似錦瘾晃、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至肉津,卻和暖如春强胰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妹沙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工偶洋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人距糖。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓玄窝,卻偏偏與公主長(zhǎng)得像牵寺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恩脂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理帽氓,服務(wù)發(fā)現(xiàn),斷路器俩块,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 我能不能堅(jiān)持下去 2017-03-17一毅等燈一毅等燈 玩笑劉瑞琦-私房歌 附上我喜歡的歌還不錯(cuò)呦黎休。。典阵。奋渔。 今天是...
    一毅等燈閱讀 130評(píng)論 0 0
  • 我好幾天都沒(méi)寫(xiě)日記了,媽媽問(wèn)我為什么不寫(xiě)日記壮啊,我說(shuō)沒(méi)得寫(xiě)嫉鲸,媽媽說(shuō)把每天發(fā)生的事記錄下來(lái)就是日記,我終于明白了原來(lái)寫(xiě)...
    李淑潔閱讀 159評(píng)論 0 0