數(shù)據(jù)存在的形式
- 文件:csv, excel, txt……
- 數(shù)據(jù)庫:mysql, access, sql server……
導(dǎo)入 CSV 文件
pandas 包中的 read_csv 函數(shù):read_csv(file, encoding)
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)生的影響
虛擬變量的取值有兩種:
- 離散特征的取值之間有大小的意義骗村,如尺寸(L XL S)呀枢;
- 離散特征的取值之間沒有大小的意義裙秋,如顏色(紅 藍(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']