pandas—データを洗う

1 |データを洗い常用方法


2 |データ集

3 |データを洗う
1 .查看基本情報

# 导入需要的库
import pandas as pd

pd.set_option('display.max_columns',1000)
pd.set_option('display.width',1000)
pd.set_option('display.max_colwidth',1000)

# 读取数据基本信息
df = pd.read_csv(r'C:\Users\Administrator\Documents\Downloads\qunar_freetrip.csv',index_col = 0)
print(df.head())
print(df.info())
print(df.describe())


2 .処理の空

columns = df.columns.values
print(columns)
df.columns = [x.strip() for x in columns]
print(df.columns)


3 .処理重複値

print(df.duplicated().value_counts()) # 共有100个重复值
duplicate = df[df.duplicated()]
print(duplicate) # 打开被定义为重复值的part
# 删除重复值,inplace = True 代表在原数据集上更改,两种方法都可以
# df.drop_duplicates(inplace = True)
df.drop(index = duplicate.index,inplace = True)
print(df.shape)




4 .異常値処理

print(df.describe().T) # 查看数值类型
# 查找异常值,以标准差的3倍作为标准
sta = (df['价格'] - df['价格'].mean()) / df['价格'].std()
print(df[sta.abs() > 3 ])
print(df[df['节省'] > df['价格']])
df.drop([2792,2938,3147,3720],inplace = True)

'''
方法二
del = pd.concat([df[sta.abs() > 3,df[df['节省'] > df['价格']]).index
df.drop(index = del,inplace = True)
'''
df.reset_index() # 重置索引
print(df.shape)

5 .欠乏値処理

print(df.isnull().sum())
# 找出出发地缺失值,可以从路线看到出发地
print(df[df.出发地.isnull()])
df.loc[df.出发地.isnull(),'出发地'] = [str(i)[:2] for i in df.loc[df.出发地.isnull(),'路线名']]
print(df.loc[[1864,1930]])

# 找出目的地缺失值
print(df[df.目的地.isnull()])
df.loc[df.目的地.isnull(),'目的地'] = '大连'
print(df.loc[1875])

# 价格跟节省的缺失值为数字类型,用mean来填充
df.价格.fillna(round(df.价格.mean(),0),inplace = True)
df.节省.fillna(round(df.节省.mean(),0),inplace = True)
print(df.isnull().sum())


6 .テキストデータ処理

print(df.酒店[:10])
# 利用正则表达式取数值 .str.extract()
# 新建一个酒店评分column,expand为True返回Dataframe,False返回Series
df['酒店评分'] = df.酒店.str.extract('(\d\.\d)分/5分',expand = False)
df['酒店等级'] = df.酒店.str.extract(' (.+) ',expand = False)

df['天数'] = df.路线名.str.extract('(\d)天\d晚',expand = False)
print(df.天数)

ソースネットワーク 戻る