Python用pandasによるデータ洗浄処理
2696 ワード
1.データ読み出し
EXcel,csv,mongoデータなどからデータを読み取ることができます
2.遍歴
3.暇を取る(NA)
3.1直接除去
3.2中位数または平均数で埋める
4.フィールドの処理
5.重複除外
6.部分だけ残しておく
7.ソート
8. isin
9. merge
10.csvとして保存するか、mongoに保存する
http://www.codeblogbt.com/archives/102061
import pandas as pd
import numpy as np
import pymongo
data = pd.DataFrame(pd.read_excel('000.xlsx', index=False))
client = pymongo.MongoClient("mongodb://XX:[email protected]:2018",connect=False)
db = client["test"]
table = db["python"]
df = pd.DataFrame(list(table.find()))
EXcel,csv,mongoデータなどからデータを読み取ることができます
2.遍歴
for i in range(data.index.max()):
if any([
'missing' in data.loc[i,:].values,
data.loc[i,'hour'] not in range(25),
]):
print(' %s '%i)
data.drop([i],inplace=True)
for i in range(0,len(df)):
info = df.loc[i].to_dict()
3.暇を取る(NA)
3.1直接除去
from numpy import nan as NA
data=Series([1,NA,3.5,NA,7])
print(data.dropna())
# 2 NA
print(data.dropna(thresh=2))
3.2中位数または平均数で埋める
df = df.fillna(df.median())
print(df.fillna(df.mean()))
4.フィールドの処理
def get_salary(salary):
s = 0
if "-" in salary:
for part in salary.split("-"):
if " " in part:
q = float(part[:-1]) * 10000
else:
q = float(part[:-1]) * 1000
s += q
return int(s/2.0)
else:
return np.nan
df["salary"] = df["salary"].apply(get_salary)
df.head()
df["company"]=df["company"].apply(lambda x :x.split("/")[0].strip('"'))
5.重複除外
df["company"].drop_duplicates()
6.部分だけ残しておく
df.loc[:,["address","company"]]
df_c = df_c.iloc[:,[4,5]]
del data["name_grade"]
del data["info_grade"]
7.ソート
df.sort_values(by='col1', ascending=False)
8. isin
mask = df['A'].isin([1]) # list
9. merge
df1 = pd.DataFrame({'name':['kate', 'herz', 'catherine', 'sally'], 'age':[25, 28, 39, 35]})
df2 = pd.DataFrame({'name_t':['kate', 'herz', 'catherine', 'sally'], 'score':[70, 60, 90, 100]})
print(pd.merge(df1, df2, left_on="name", right_on="name_t").drop('name_t', axis=1))
10.csvとして保存するか、mongoに保存する
df["company"].drop_duplicates().to_csv("company.csv",encoding="utf-8")
db[MONGO_TABLE].insert(row.to_dict())
http://www.codeblogbt.com/archives/102061