Python資料預處理

2021-08-23 12:29:18 字數 3360 閱讀 5678

1.匯入資料檔案(excel,csv,資料庫檔案等)

df=read_table(file,names=[列名1,列名2,,,],sep="",encoding)

#file是檔案路徑,names預設為檔案的第一行為列名,sep為分隔符,預設為空,表示預設匯入為一列

#encoding設定檔案編碼,匯入中文時,需設定utf-8

2.匯出資料檔案

to_csv(filepath,sep="",index=true,header=true)

#index是否匯出行序號,預設為匯出,header是否匯出列名,預設為匯出

data.loc[:,["城市","公司全名"]] #輸出特定列,行可模擬

data.iloc[3,1] #輸出第三行,第一位

data.iloc[3:5,1:3] #3-5行,1-2列交集

data.ix[:3,["a","c"]] #0-3行

data.a>8 #輸出a列大於8的所有行

print(df[data.a>8])

3.重複值處理(只保留乙個)

df.drop_duplicates()#直接呼叫函式即可(保留一行)
4.缺失值處理

產生原因:資訊無法獲取,資訊被遺漏或錯誤處理

處理方式:補齊,刪除缺失行,不處理

df.dropna()#去除資料結構中值為空的資料

df.dropna(axis=0,how="any") #注釋:axis=0代表"行","any"代表任何空值行,如何是"all"則代表所有值都為空時,才刪除該行

df.fillna(value=0) #填充空值為0 適合資料龐大不易觀察的情況下

print(df.isnull()) #判斷空值

print(np.any(df.isnull())==true) #至少包含乙個空值,則返回true

5.空格值處理

n=df["name"].str.strip()   #清除字元型資料左右的空格

df["name"]=n

6.欄位抽取與字段拆分

根據已知列資料的開始和結束,抽出新的列

slice(start,stop) #開始位置,結束位置

如:號碼138 1337 5758

df["tel"]=df["tel"].astype(str)

df["tel"].str.slice(0,3) #抽取手機號碼的前三位數(運營商)

#欄位拆分

split(sep,n,expand=false)

#sep指用於分割的字串,n指分割為多少列,expand是否展開為資料框(預設為false返回series,true返回dataframe)

news=df["name"].str.split("",1,true) #1代表拆分為兩列,從0開始計數

news.columns=["band","names"] #命名

7.記錄抽取

#dataframe[condition]

#比較df[df.comments>10000]

#範圍between(left,right)

df[df.comments.between(1000,10000)]

#空值匹配

pandas.isnull(column) #判斷是否有空值

df[pandas.isnull(df.title)

#字元匹配

str.contains(patten,na=false) #空值的處理方式,空值不匹配(false)

如:df[df.title.str.contains("臺電",na=false)]

#邏輯運算(與&,或|,取反not)

如:df[(df.comments>=1000)&(df.comments<=10000)]

等價於df[df.comments.between(1000,10000)]

8.隨機抽樣(按照一定的行數或比例抽取)

import numpy as np

np.random.randint(start,end,num) #在start和end之間隨機抽取num個樣本數,返回行所在的索引值

如:r=np.random.randint(0,10,3)

df.loc(r,:) #將所在行輸出

9.記錄合併

將兩個結構相同的資料框合併為乙個資料框

#axis=0代表豎向排列,ignore_index代表忽視索引,重新排序,引數join預設為outer,反之inner代表相同部分合併

10.欄位合併

字段拆分的逆向操作

字元合併方法:

x=x1+x2+,,,(序列長度一直,並且為字元型資料)

df.astype(str) #轉換為字元型資料

tel=df["band"]+df["area"]+["num"] #合並且賦值於新變數

11.欄位匹配

merge函式

left=pd.dataframe({})

#預設的合併方式是how="inner":合併同類項,outer為合併所有的,沒有的以空值nan填充

#或者(left,right,left_index=true,right_index=true,how="outer")

#合併多個dataframe

contat([df1,df2,df3],axis=0) #axis=0代表豎向排列

12.簡單計算

res=df.price*df.num

df["total"]=a

13.資料標準化(0-1)

x*=(x-min)/(max-min)

scale=(df.score-df.score.min())/(df.score.max()-df.score.min())

python資料預處理

scikit learn 提供的binarizer能夠將資料二元化 from sklearn.preprocessing import binarizer x 1,2,3,4,5 5,4,3,2,1 3,3,3,3,3 1,1,1,1,1 print before transform x binar...

python資料預處理

import pandas as pd 缺失值處理 df pd.read excel users caizhengjie desktop a.xlsx print df 直接呼叫info方法就會返回每一列的缺失值 print df.info print isnull方法判斷哪個是缺失值 print ...

Python 資料預處理

匯入標準庫 import numpy as np import matplotlib.pyplot as plt import pandas as pd 匯入資料集 dataset pd.read csv data 1 csv read csv 讀取csv檔案 建立乙個包含所有自變數的矩陣,及因變數...