數(shù)據(jù)分析2 - 數(shù)據(jù)導(dǎo)入及處理

數(shù)據(jù)存在的形式

  • 文件:csv, excel, txt……
  • 數(shù)據(jù)庫:mysql, access, sql server……

導(dǎo)入 CSV 文件

pandas 包中的 read_csv 函數(shù):read_csv(file, encoding)

pandas.read_csv參數(shù)整理

from pandas import read_csv

# 相對(duì)地址
df = read_csv(
            r'1.csv'
        )
df = read_csv(
            './1.csv'
        )
# 絕對(duì)地址
df = read_csv(
            r'C:\Users\lian\Desktop\python\4.1\1.csv'
        )
df = read_csv(
            'C:/Users/lian/Desktop/python/4.1/1.csv'
        )

導(dǎo)入文本文件

pandas 包中的 read_table 函數(shù):read_table(file,names=[列名1,列名2,...],sep="",encoding,...)

參數(shù) 注釋
names 指定列名,默認(rèn)以文件中第一行為列名
sep 分隔符毅该,默認(rèn)為空眶掌,表示默認(rèn)導(dǎo)入為一列朴爬。當(dāng)文本中以,隔開哥哥元素時(shí),需指定為,
from pandas import read_table

df = read_table(
            '2.txt',
            names=['age', 'names'],
            sep=','
        )

當(dāng)導(dǎo)入中文時(shí)存在問題的時(shí)候具滴,可以設(shè)置 engine = 'python' 解決問題

df = read_table(
            '2.txt',
            names=['age', 'names'],
            sep=',',
            encoding='UTF-8',
            engine='python'
        )

導(dǎo)入 Excel 文件

pandas 包中的 read_excel 函數(shù):read_excel(file,sheetname,names)

參數(shù) 注釋
sheetname 讀取哪一個(gè) sheet
names 指定列名,默認(rèn)以文件中第一行為列名
from pandas import read_excel

df = read_excel(
            '3.xlsx',
            sheetname='data'
        )

dataFrame 導(dǎo)出為 csv 文件

to_csv 函數(shù):dataFrame.to_csv(file,sep="",index,header)

參數(shù) 注釋
index 是否導(dǎo)出行序號(hào)疲恢,默認(rèn)為 True显拳。實(shí)際一般設(shè)置為 False
header 是否導(dǎo)出列名萎攒,默認(rèn)為 True
from pandas import DataFrame

df = DataFrame({
            'age':[21,22,23],
            'name':['ken','john','jimi']
        })
# 導(dǎo)出到當(dāng)前目錄下名為 test.csv 的文件
df.to_csv(
            'test.csv',
            index=False
        )

重復(fù)值處理

把 dataFrame 中,行相同的數(shù)據(jù)只保留一行

相關(guān)函數(shù):

  • dataFrame.duplicated() 找出或只按指定列找出重復(fù)的行羊精,根據(jù)是否重復(fù)返回元素值為 boolean 的 Series读规,表示是否重復(fù)(重復(fù)為 True)
  • dataFrame.drop_duplicates() 刪除或值考慮某一列的值刪除重復(fù)的行束亏,返回新的 DataFrame
from pandas import read_csv

# 導(dǎo)入數(shù)據(jù)
df = read_csv('data.csv')

# 找出行重復(fù)的位置碍遍。返回一個(gè) Series,值為 boolean 东跪,表示每行是否重復(fù)虽填,當(dāng)行所有元素的值都重復(fù)時(shí)卤唉,返回 True
dIndex = df.duplicated()

# 根據(jù)某些列竭恬,找出重復(fù)的位置
dIndex = df.duplicated('id')
# 當(dāng)指定多列時(shí)赊级,是 and 關(guān)系理逊,即所有指定列都重復(fù)了才為 True
dIndex = df.duplicated(['id', 'key'])

#根據(jù)返回值晋被,把重復(fù)數(shù)據(jù)提取出來
df[dIndex]

#直接刪除重復(fù)值
#默認(rèn)根據(jù)所有的列羡洛,進(jìn)行刪除
newDF = df.drop_duplicates()
#當(dāng)然也可以指定某一列欲侮,進(jìn)行重復(fù)值處理
newDF = df.drop_duplicates('id')

缺失值的處理

缺失值的處理方式:1. 數(shù)據(jù)補(bǔ)齊刁俭;2. 刪除對(duì)應(yīng)缺失行牍戚;3. 不處理

相關(guān)函數(shù):

  • dataFrame.isnull()
  • dataFrame.any(axis=1)
  • dataFrame.fillna('填充 nan 的值')
  • dataFrame.dropna()
from pandas import read_csv

# 導(dǎo)出數(shù)據(jù)
# data.csv 本身已有缺失值
df = read_csv(
    'data.csv'
)

# data2.csv 無缺失值翘魄,na_values=['a','b'] 表示將元素值為 a 或 b 的元素值設(shè)置為 nan
df = read_csv(
    'data2.csv',
    na_values=['a','b']
)

# 找出空值的位置
# isnull() 函數(shù)返回一個(gè)同結(jié)構(gòu)的 DataFrame(大小暑竟、列名、索引相同),但元素值以是否為 null ( nan ) 設(shè)置為 boolean 值
isNA = df.isnull()

# 獲取出空值所在的行
# isNA.any(axis=1) 返回一個(gè) boolean 值的 Series 腹躁,當(dāng) axis=1 時(shí)表示 isNA 的每一行是否有存在值為 True 的元素纺非,只要有則對(duì)應(yīng)的 boolean 為 True 
# 再根據(jù) dataFrame[series] 過濾出有空值的行
df[isNA.any(axis=1)]

# 獲取根據(jù)某一列或多列中存在空值所在的行
# isNA[['key']] 得到的是 DataFrame烧颖,isNA['key'] 得到的是 Series
df[isNA[['key']].any(axis=1)]

# 獲取 key 或 value 列中空值所在的行
df[isNA[['key', 'value']].any(axis=1)]

# 將 df 中元素值為 nan 的值設(shè)置為 '未知'
df.fillna('未知')

# 直接刪除空值炕淮。將有空值的該行刪除
newDF = df.dropna()

空格值的處理

相關(guān)函數(shù):

  • str.strip() 清除字符型數(shù)據(jù)左右的空格(lstrip() 清除左邊,rstrip() 清除右邊)
  • series.str.xxx 表示對(duì) series 中所有字符元素做處理
from pandas import read_csv

df = read_csv(
    'data.csv'
)

# 處理 name 字段中元素的字符
newName = df['name'].str.lstrip()
newName = df['name'].str.rstrip()
newName = df['name'].str.strip()

df['name'] = newName

字段抽取

字段抽取是根據(jù)指定字段下的一組數(shù)據(jù)的開始和結(jié)束位置润歉,抽取形成新的列

相關(guān)函數(shù):

  • series.astype(str) 對(duì) series 中所有元素轉(zhuǎn)化為 str 類型
  • str.slice(0, 3) 對(duì) str 做切片

字段截取函數(shù):slice(start, stop)

from pandas import read_csv

df = read_csv(
    'data.csv'
)

# 將 df 數(shù)據(jù)框中 tel 字段的元素值的類型轉(zhuǎn)化為 str 類型卡辰,并賦值回去
df['tel'] = df['tel'].astype(str)

#運(yùn)營商
bands = df['tel'].str.slice(0, 3)
#地區(qū)
areas = df['tel'].str.slice(3, 7)
#號(hào)碼段
nums = df['tel'].str.slice(7, 11)

#賦值回去
df['bands'] = bands
df['areas'] = areas
df['nums'] = nums

字段拆分

字段拆分指按照固定的字符反砌,拆分已有字符串

相關(guān)函數(shù):

  • str.split(sep, n, expand)
參數(shù) 注釋
sep 分割的字符串所用的子字符串
n 分割為多少列。當(dāng)為 1 時(shí)酒贬,分割為兩列锭吨,即只分割找到的第一個(gè) sep
expand 是否展開為數(shù)據(jù)框,默認(rèn) False考蕾。當(dāng)為 True 返回 DataFrame掸鹅,當(dāng)為 False 返回 Series
from pandas import read_csv

df = read_csv(
    'data.csv'
)

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

newSe = df['name'].str.split(' ', 2, True)

# 默認(rèn)分割后的列名為 0,1,...
newDF.columns = ['band', 'name']

記錄抽取

記錄抽取指根據(jù)一定的條件壁榕,對(duì)數(shù)據(jù)進(jìn)行抽取

相關(guān)函數(shù):
dataFrame[condition] condition 為一 Series务甥,元素?cái)?shù)量與 dataFrame 行數(shù)相等,元素為 boolean 值挺尿,決定是否抽取記錄

常用的條件類型:

  • 比較運(yùn)算
    > < >= <= !=
  • 范圍運(yùn)算
    between(left, right)
  • 空值匹配
    pandas.isnull(column)
  • 字符匹配
    str.contains(pattern, na=False)
  • 邏輯運(yùn)算
    & | not
    df[(df.comments >= 1000) & (df.comments <= 10000)] 等價(jià)于 df[df.comments.between(1000, 10000)]
import pandas

df = pandas.read_csv(
    'data.csv', sep="|"
)

#單條件
df[df.comments>10000]

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

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

#根據(jù)關(guān)鍵字過濾
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)]

隨機(jī)抽樣

隨機(jī)抽樣指隨機(jī)從數(shù)據(jù)中,按照一定的函數(shù)或者比例抽取數(shù)據(jù)

相關(guān)函數(shù):
numpy.random.seed(seed=2) 設(shè)置隨機(jī)種子
dataFrame.sample(n, frac, replace=False)

參數(shù) 注釋
n 按個(gè)數(shù)抽樣
frac 按百分比抽樣
replace 是否可放回抽樣。默認(rèn) False 不可放回
import numpy
import pandas

data = pandas.read_csv(
    'data.csv'
)


#設(shè)置隨機(jī)種子
numpy.random.seed(seed=2)


#按照個(gè)數(shù)抽樣
data.sample(n=10)
#按照百分比抽樣
data.sample(frac=0.02)
#是否可放回抽樣
data.sample(n=10, replace=True)

典型抽樣 之 分層抽樣:

按照某一字段將 dataFrame 分為幾組限寞,并在每個(gè)分組抽取樣本

相關(guān)函數(shù):

  • dataFrame.groupby('class', group_keys) 根據(jù)對(duì)應(yīng)的字段的值將 dataFrame 分組履植,從而獲取 DataFrameGroupBy 實(shí)例。group_keys 指當(dāng) DataFrameGroupBy 實(shí)例調(diào)用 .apply() 函數(shù)時(shí)鼠渺,是否添加分組字段的值到索引以便區(qū)分拦盹。DataFrameGroupBy 實(shí)例有屬性:
    • dataFrameGroupBy.groups 獲取一個(gè) dict,該 dict 以原 dataFrame 所指定 groupby 的字段的值為 key 校读,value 為對(duì)應(yīng)值的行的索引的集合
    • dataFrameGroupBy.apply(funcName,...) 將分組后的每個(gè) dataFrame 傳入指定的函數(shù)作處理蛾洛,該函數(shù)定義類似為 def funcName(dataFrame, *args, **kv) ,參數(shù)dataFrame 指傳進(jìn)的 dataFrame 谎碍,該 dataFrame 與一般 dataFrame 多了一個(gè)屬性 .name 蟆淀,指分組對(duì)應(yīng)的字段的值熔任,函數(shù)返回一個(gè)同參數(shù)一樣結(jié)構(gòu)的dataFrame碱蒙。apply() 函數(shù)最終返回一個(gè) DataFrame赛惩,作為各個(gè)分組應(yīng)用處理后的 dataFrame 的重新整合
# 按 class 列進(jìn)行分組,得到一個(gè)分組對(duì)象
gbr = data.groupby("class")
# 獲取所有分組字典 
gbr.groups

# 定義一個(gè)字典后雷,指明每組需要抽取的個(gè)數(shù)
typicalNDict = {
    1: 2, 
    2: 4, 
    3: 6
}

# 定義分層抽樣的方法
def typicalSampling(group, typicalNDict):
    name = group.name
    n = typicalNDict[name]
    return group.sample(n=n)

# 使用分組對(duì)象的 apply 方法
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ù)據(jù)框的合并

記錄合并指將兩個(gè)以上結(jié)構(gòu)相同或不同的數(shù)據(jù)框勉抓,合并成一個(gè)數(shù)據(jù)框

相關(guān)函數(shù):

  • concat([df1, df2,...]) 指記錄的合并,即假設(shè) df1 有m條記錄隐圾,df2 有n條記錄,則合并后有 m+n 條記錄盐碱,索引為原來的索引沪伙,對(duì)于不同 DataFrame 字段不同的問題瓮顽,則缺失的字段的值以 nan 填充
import pandas
from pandas import read_csv

data1 = read_csv(
    'data1.csv', sep="|"
)
data2 = read_csv(
    'data2.csv', sep="|"
)
data3 = read_csv(
    'data3.csv', sep="|"
)
data = pandas.concat([data1, data2, data3])

# 當(dāng)列名不一樣時(shí),合并后數(shù)據(jù)缺失部分填充為 nan
data = pandas.concat([
    data1[[0, 1]], 
    data2[[1, 2]], 
    data3[[0, 2]]
])

字段合并 —— 列的合并

字段合并指將同意數(shù)據(jù)框中的不同列進(jìn)行合并焰坪,形成新的列

字段合并方法:x = x1 + x2 + ... (x 指數(shù)據(jù)列,Series)

相關(guān)函數(shù):

  • dataFrame.astype(str) 將整個(gè) dataFrame 元素的值的類型轉(zhuǎn)化為 str
from pandas import read_csv

df = read_csv(
    'data.csv', 
    sep=" ", 
    names=['band', 'area', 'num']
)

df = df.astype(str)

tel = df['band'] + df['area'] + df['num']

df['tel'] = tel

字段匹配

字段匹配指根據(jù)各表共有的關(guān)鍵字段聘惦,把各表所需的記錄一一對(duì)應(yīng)起來某饰。即把兩個(gè) dataFrame 關(guān)聯(lián)起來

相關(guān)函數(shù):

  • merge(x,y,left_on,right_on)
參數(shù) 注釋
x 第一個(gè)數(shù)據(jù)框
y 第二個(gè)數(shù)據(jù)框
left_on 第一個(gè)數(shù)據(jù)框用于匹配的列
right_on 第二個(gè)數(shù)據(jù)框用于匹配的列
how merge 方式
import pandas

items = pandas.read_csv(
    'data1.csv', 
    sep='|', 
    names=['id', 'comments', 'title']
)

prices = pandas.read_csv(
    'data2.csv', 
    sep='|', 
    names=['id', 'oldPrice', 'nowPrice']
)

# 默認(rèn)只是保留連接得上的部分
# 類似數(shù)據(jù)庫操作的 inner join
itemPrices = pandas.merge(
    items, 
    prices, 
    left_on='id', 
    right_on='id'
)

# 即使連接不上,也保留左邊沒連上的部分
# 類似數(shù)據(jù)庫操作的 left join
itemPrices = pandas.merge(
    items, 
    prices, 
    left_on='id', 
    right_on='id',
    how='left'
)

# 即使連接不上黔漂,也保留右邊沒連上的部分
# 類似數(shù)據(jù)庫操作的 right join
itemPrices = pandas.merge(
    items, 
    prices, 
    left_on='id', 
    right_on='id',
    how='right'
)

# 即使連接不上炬守,也保留所有沒連上的部分
# 類似數(shù)據(jù)庫操作的 full join
itemPrices = pandas.merge(
    items, 
    prices, 
    left_on='id', 
    right_on='id',
    how='outer'
)

簡單計(jì)算

簡單計(jì)算指通過對(duì)已有字段進(jìn)行加減乘除等運(yùn)算,得出新的字段

import pandas

data = pandas.read_csv(
    'data.csv', 
    sep="|"
)

data['total'] = data.price*data.num

#注意撞羽,用點(diǎn)的方式惕澎,雖然可以訪問,但是并沒有組合進(jìn)數(shù)據(jù)框中
data = pandas.read_csv(
    'data.csv', 
    sep="|"
)

data.total = data.price*data.num

# 錯(cuò)誤楼入,因?yàn)?data 沒有對(duì)應(yīng)的字段 total
data.total

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

數(shù)據(jù)標(biāo)準(zhǔn)化指將數(shù)據(jù)按比例縮放孕惜,使之落入到特定區(qū)間

0-1 標(biāo)準(zhǔn)化計(jì)算

相關(guān)函數(shù):

  • series.min()
  • series.max()
  • series.describe() 返回一個(gè) Series ,索引為 count / mean / std / min / 25% / 50% / 75% / max秆撮,保存著對(duì)應(yīng)的值
import pandas

data = pandas.read_csv(
    'data.csv'
)

# round 取小數(shù)點(diǎn)后兩位
data['scale'] = round(
    (
        data.score-data.score.min()
    )/(
        data.score.max()-data.score.min()
    )
    , 2
)

數(shù)組分組

數(shù)組分組指根據(jù)數(shù)據(jù)分析對(duì)象的特征腾供,按照一定的數(shù)值指標(biāo),把數(shù)據(jù)分析對(duì)象劃分為不通的區(qū)間進(jìn)行研究扳埂,以揭示其內(nèi)在的聯(lián)系和規(guī)律性

主要針對(duì)如年齡這個(gè)字段号枕,值比較分散皿桑,我們可以將其劃分為如 [ '20以下', '20到40', '40到60', '60到80', '80到100', '100以上' ] 近零,以便做進(jìn)一步的分析

相關(guān)函數(shù):

  • pandas.cut(series, bins, right=True, labels=NULL) 返回一個(gè) Series
參數(shù) 注釋
series 需要分組的數(shù)據(jù)
bins 分組的劃分?jǐn)?shù)組
right 分組的時(shí)候,右邊是否閉合南用,默認(rèn) True。即如 (0, 10] 還是 [0, 10)
labels 分組的自定義標(biāo)簽,可以不自定義
import pandas

data = pandas.read_csv(
    'data.csv', 
    sep='|'
)

# 定義一個(gè)分組區(qū)間
bins = [
    min(data.cost)-1, 20, 40, 60, 
    80, 100, max(data.cost)+1
]

data['cut'] = pandas.cut(
    data.cost, 
    bins
)

data['cut'] = pandas.cut(
    data.cost, 
    bins, 
    right=False
)

labels = [
    '20以下', '20到40', '40到60', 
    '60到80', '80到100', '100以上'
]

data['cut'] = pandas.cut(
    data.cost, bins, 
    right=False, labels=labels
)

時(shí)間處理

時(shí)間轉(zhuǎn)換,str => datetime

時(shí)間轉(zhuǎn)換函數(shù):

  • pandas.to_datetime(datetimeData, format) 當(dāng) datetimeData 為 str 時(shí),返回一個(gè) datetime,當(dāng)為 series 時(shí)卒废,返回一個(gè) series
  • pandas.datetime.strptime(dates, '%Y%m%d')
屬性 注釋
%Y 年份
%m 月份
%d 日期
%H 小時(shí)
%M 分鐘
%S 秒鐘

時(shí)間格式化晒来,datetime => str

  • series.dt 表示對(duì) series 所有 datatime 類型的元素做處理
  • dateTimeStr = datetime.strftime(format) 時(shí)間格式化函數(shù)

時(shí)間屬性抽取脱盲,指從日期格式里面蹲坷,抽取出需要的部分屬性

時(shí)間屬性抽取語法:datetime.property

property 可選項(xiàng) 注釋
second
minute
hour
day
month
year
weekday
import pandas

data = pandas.read_csv(
    'data.csv', 
    encoding='utf8'
)

data['時(shí)間'] = pandas.to_datetime(
    data.注冊時(shí)間, 
    format='%Y/%m/%d'
)

data['格式化時(shí)間'] = data.時(shí)間.dt.strftime('%Y-%m-%d')

data['時(shí)間.年'] = data['時(shí)間'].dt.year
data['時(shí)間.月'] = data['時(shí)間'].dt.month
data['時(shí)間.周'] = data['時(shí)間'].dt.weekday
data['時(shí)間.日'] = data['時(shí)間'].dt.day
data['時(shí)間.時(shí)'] = data['時(shí)間'].dt.hour
data['時(shí)間.分'] = data['時(shí)間'].dt.minute
data['時(shí)間.秒'] = data['時(shí)間'].dt.second

時(shí)間抽取

時(shí)間抽取指按一定條件,對(duì)時(shí)間格式的數(shù)據(jù)進(jìn)行抽取

相關(guān)函數(shù):

  • 根據(jù)索引進(jìn)行抽取
    • dataFrame.ix 是 dataFrame 關(guān)于 index 的相關(guān)操作
    • dataFrame.ix[start: end] 表示獲取 index 區(qū)間的行
    • dataFrame.ix[dates] 表示獲取指定 list 的行
  • 根據(jù)時(shí)間列進(jìn)行抽取
    • dataFrame[condition]
import pandas

data = pandas.read_csv(
    'data.csv', 
    encoding='utf8'
)

# 時(shí)間相關(guān)處理函數(shù)郊尝,str ==> datetime
dateparse = lambda dates: pandas.datetime.strptime(dates, '%Y%m%d')

# parse_dates 指定需要進(jìn)行時(shí)間處理的字段谚鄙,date_parser 指定時(shí)間處理函數(shù)娘赴,index_col 所指定的列作為索引
data = pandas.read_csv(
    'data.csv', 
    encoding='utf8',
    parse_dates=['date'],
    date_parser=dateparse,
    index_col='date'
)
#根據(jù)索引進(jìn)行抽取
import datetime

# 創(chuàng)建兩個(gè) datatime 類型實(shí)例
dt1 = datetime.date(year=2016,month=2,day=1);
dt2 = datetime.date(year=2016,month=2,day=5);

# 切片
data.ix[dt1: dt2]
# list 捉片,指定要獲取的 index
data.ix[[dt1,dt2]]
#根據(jù)時(shí)間列進(jìn)行抽取
data = pandas.read_csv(
    'data.csv', 
    encoding='utf8',
    parse_dates=['date'],
    date_parser=dateparse,
)

data[(data.date>=dt1) & (data.date<=dt2)]

虛擬變量

虛擬變量母市,也叫啞變量和離散特征編碼梧油,可用來表示分類變量儡陨、非數(shù)量因素可能產(chǎn)生的影響

虛擬變量的取值有兩種:

  1. 離散特征的取值之間有大小的意義骗村,如尺寸(L XL S)呀枢;
  2. 離散特征的取值之間沒有大小的意義裙秋,如顏色(紅 藍(lán) 綠)

離散特征的取值之間有大小的意義的處理函數(shù):pandas.Series.map(dict) 摘刑、series.map(dict) dict 以 series 的值為 key 枷恕,以要映射的值為 value徐块,返回一個(gè) Series

離散特征的取值之間沒有大小的意義的處理函數(shù):pandas.get_dummies(data, prefix=None, prefix_sep='_'. dummy_na=False, columns=None, drop_first=False)

屬性 注釋
data 要處理的 DataFrame
prefix 列名的前綴蛹锰,在多個(gè)列有相同的離散項(xiàng)時(shí)使用
prefix_sep 前綴和離散值的分隔符,默認(rèn)為下劃線
dummy_na 是否把 nan 值作為一個(gè)離散值進(jìn)行處理舞终,默認(rèn)不處理
columns 要處理的列名敛劝,如果不指定夸盟,則默認(rèn)處理所有列
drop_first 是否從備選項(xiàng)中刪除第一個(gè),建模的時(shí)候?yàn)楸苊夤簿€性使用
import pandas

data = pandas.read_csv(
    'data.csv', 
    encoding='utf8'
)

# 可以看出 Education Level 取值之間有大小的意義桩砰,我們可以將之與具體的數(shù)值映射
data['Education Level'].drop_duplicates()
"""
博士后    Post-Doc
博士      Doctorate
碩士      Master's Degree
學(xué)士      Bachelor's Degree
副學(xué)士    Associate's Degree
專業(yè)院校  Some College
職業(yè)學(xué)校  Trade School
高中      High School
小學(xué)      Grade School
"""

educationLevelDict = {
    'Post-Doc': 9,
    'Doctorate': 8,
    'Master\'s Degree': 7,
    'Bachelor\'s Degree': 6,
    'Associate\'s Degree': 5,
    'Some College': 4,
    'Trade School': 3,
    'High School': 2,
    'Grade School': 1
}

data['Education Level Map'] = data[
    'Education Level'
].map(
    educationLevelDict
)

# 可以看出 Gender 取值之間沒有大小的意義
data['Gender'].drop_duplicates()
"""
男    Male
女      Female
空值      nan
"""

# 這里離散值有 Male Female(忽略 nan),加上前綴和分隔符庶溶,生成兩列 'Gender_Male' 偏螺、'Gender_Female' ,以 0或1 表示在原列中是否有對(duì)應(yīng)的值酿联,返回的 dataFrame 不包含原 'Gender' 
dummies = pandas.get_dummies(
    data, 
    columns=['Gender'],
    prefix=['Gender'],
    prefix_sep="_",
    dummy_na=False,
    drop_first=False
)

dummies['Gender'] = data['Gender']
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末采幌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子征绎,更是在濱河造成了極大的恐慌人柿,老刑警劉巖忙厌,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哥放,死亡現(xiàn)場離奇詭異,居然都是意外死亡踩身,警方通過查閱死者的電腦和手機(jī)社露,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門附鸽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拒炎,“玉大人挨务,你說我怎么就攤上這事谎柄〕祝” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵拙吉,是天一觀的道長筷黔。 經(jīng)常有香客問我佛舱,道長挨决,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮盖高,結(jié)果婚禮上掏秩,老公的妹妹穿的比我還像新娘蒙幻。我一直安慰自己邮破,他們只是感情好仆救,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布摧莽。 她就那樣靜靜地躺著镊辕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪征懈。 梳的紋絲不亂的頭發(fā)上卖哎,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天亏娜,我揣著相機(jī)與錄音维贺,去河邊找鬼幸缕。 笑死晰韵,一個(gè)胖子當(dāng)著我的面吹牛熟妓,可吹牛的內(nèi)容都是我干的起愈。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼纵菌,長吁一口氣:“原來是場噩夢啊……” “哼咱圆!你這毒婦竟也來了功氨?” 一聲冷哼從身側(cè)響起捷凄,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤跺涤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后软舌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佛点,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡超营,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年阅虫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颓帝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片购城。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瘪板,死狀恐怖侮攀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撇叁,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站泡一,受9級(jí)特大地震影響觅廓,放射性物質(zhì)發(fā)生泄漏杈绸。R本人自食惡果不足惜瞳脓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一埋酬、第九天 我趴在偏房一處隱蔽的房頂上張望烧栋。 院中可真熱鬧,春花似錦审姓、人聲如沸魔吐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽症脂。三九已至诱篷,卻和暖如春棕所,著一層夾襖步出監(jiān)牢的瞬間琳省,已是汗流浹背躲撰。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工桦他, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留快压,地道東北人蔫劣。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓脉幢,卻偏偏與公主長得像鸵隧,于是被迫代替她去往敵國和親豆瘫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子外驱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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