from pandas import Series,DataFrame
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
%matplotlib inline
缺失值
判断是否有缺失值
df1.isnull() #True的为缺失值
df1.notnull() #False为缺失值
每一特征的缺失值的总量
df1.isnull().sum()
所有缺失值的总量
df1.isnull().sum().sum()
查看是否有缺失值
df1.isnull().values.any()
df1.info()
缺失值删除
df1.dropna()
构建一个有缺失值的dataframe
df2 = DataFrame(np.arange(12).reshape(3,4))
df2
df2.ix[2,:] = np.nan
df2[3] = np.nan
df2
删除所有是nan的行
df2.dropna(how='all')
删除所有是nan的列
df2.dropna(how='all',axis=1)
用0填充nan
df2.fillna(0)
将df[0]用1填补缺失值,将df[1]用6填充
df2.fillna({0:1,1:6,2:9,3:11})
df2.fillna(method='ffill')
重复数据
df1.duplicated()
df1.drop_duplicates(inplace=True)
df1.drop_duplicates(['sex','year'])
df1.drop_duplicates(['sex','year'],keep='last')
替换值
df1.replace(['',2001],['不详',2002])
df1.replace({'':'不详',2001:2002})
用函数
def f(x):
if x >= 90:
return '优秀'
elif 70<=x<90:
return '良好'
elif 60<=x<70:
return '合格'
else:
return '不合格'
df2['class'] = df2['math'].map(f)
删除操作
del df2['class']
异常值
创建一个dataframe
df3 = DataFrame(np.arange(10),columns=['X'])
df3['Y'] = 2 * df3['X'] + 0.5
df3.iloc[9,1] = 185
df3
df3.plot(kind='scatter',x='X',y='Y')
one-hot 编码----哑变量
所以最终得到的每句话的特征向量就是:
我爱中国 -> 1,1,0,0,1
爸爸妈妈爱我 -> 1,1,1,1,0
爸爸妈妈爱中国 -> 0,1,1,1,1
那么这样做的优点和缺点都有什么?
优点:
解决了分类器处理离散数据困难的问题
一定程度上起到了扩展特征的作用(上例中从3扩展到了9)
缺点:
one-hot是一个词袋模型,不考虑词与词之间的顺序问题,而在文本中,次的顺序是一个很重要的问题
one-hot是基于词与词之间相互独立的情况下的,然而在多数情况中,词与词之间应该是相互影响的
one-hot得到的特征是离散的,稀疏的
https://blog.csdn.net/Dorothy_Xue/article/details/84641417
merge