1. 处理缺失数值
string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])
string_data
string_data[0] = None
string_data.isnull()
1.1 过滤缺失值
- 对于Series来说,直接通过
series.dropna()
- 对于DataFrame,
frame.dropna()
会删除含有NaN的行,axis=1
即可改为丢弃列,默认how = 'any'
- 通过
thresh = 2
仅删除超过包含两个非NaN
的行或列,df.dropna(thresh = 2)
inplace = True
就地删除,返回空
1.2 填充缺失数据
df.fillna(0)
通过0替换缺失值df.fillna( {1:0.5, 2:0} )
,字典调用,对不同列填充不同数据df.fillna( method='ffill', limit = 2 )
自动复制上一个数填充,如果第一个为空则后一个填充也为空,限制limit为2个
2. 数据转换
2.1 移除重复数据
df.duplicated()
重复的行会True
df.drop_duplicates( ['k1', 'k2'] )
根据某几列或一列判定是否重复并移除重复的,默认为匹配所有列,保留第一个重复的
2.2 利用函数或映射进行数据转换
data['animal'] = lowercased.map(meat_to_animal)
其中lowercased
是DataFrame和 meat_to_animal
字典的索引 对应数值形成成一列
2.3 替换某些数值为默认值
data.replace(-999, np.nan)
单一替换,替换数值为-999
的为NaN
data.replace([-999, -1000], np.nan)
多对一data.replace({-999: np.nan, -1000: 0})
多对多
2.4 对轴索引修改
transform = lambda x: x[:4].upper(), data.index = data.index.map(transform)
对轴索引映射修改data.rename(index=str.title, columns=str.upper)
直接通过rename
修改data.rename(index={'OHIO': 'INDIANA'}, columns={'three': 'peekaboo'} , inplace=True)
就地修改
2.5 离散数据的统计划分
- 数据统计划分,根据区间划分,默认左开右闭(通过
right=False
修改为左闭右开),bins = [18, 25, 35, 60, 100] ,cats = pd.cut(ages, bins)
将age
划分成多个年龄段 - 对于
cut
划分的结果cats
属性有:cats.codes
将每个具体的值转化为第几个类别[0 0 0 1 0 0 2 1 3 2 2 1]
, cats.categories
属性显示划分的种类区间, pd.value_counts(cats)
属性显示分类统计的结果 - 对分属类别命名
label = group_names
:group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior'], pd.cut(ages, bins, labels=group_names)
- 等分数据,设置精确度
precision=2
:pd.cut(data, 4, precision=2)
2.6 对超出范围的数据修改
data = pd.DataFrame(np.random.randn(1000, 4))
查看数据基本信息: data.describe()
- 查找某列中绝对值⼤⼩超过3的值:
col = data[2], col[np.abs(col) > 3]
- 设置any(1)则各行中某列存在绝对值大于3即可
data[(np.abs(data) > 3).any(1)]
np.sign(data)
将数据正的转为1
,负的转为-1