本文最后更新于 258 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com
缺失值的处理
Pandas模块支持对有缺失值的数据进行相关处理。导入相关模块:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(4, 5), columns=list("abcde"))
DataFrame的行标记可以通过赋值修改:
df.index = pd.date_range("20000101", periods=4)
df.iloc[[2, 3], [3, 4]] = np.nan
df
a | b | c | d | e | |
---|---|---|---|---|---|
2000-01-01 | 2.428019 | 2.317165 | 1.186934 | -0.208601 | -1.278155 |
2000-01-02 | 1.040802 | -2.269797 | 0.580195 | -0.241620 | -0.620173 |
2000-01-03 | -2.392500 | 0.298097 | 0.407541 | NaN | NaN |
2000-01-04 | -0.945231 | -0.258435 | -0.290456 | NaN | NaN |
可以使用.dropna()
方法去掉所有包含缺失值的行,得到一个新的DataFrame:
df.dropna(how="any")
a | b | c | d | e | |
---|---|---|---|---|---|
2000-01-01 | 2.428019 | 2.317165 | 1.186934 | -0.208601 | -1.278155 |
2000-01-02 | 1.040802 | -2.269797 | 0.580195 | -0.241620 | -0.620173 |
how参数设为“any”表示只要该行有缺失值,就会被去掉,如果换成“all”,则表示只有该行全部缺失时才去掉。.dropna()方法还可以通过axis参数指定对行还是对列进行操作,默认值为0,即对行;如果要对列进行操作,可以将axis参数设为1:
df.dropna(axis=1, how="any")
a | b | c | |
---|---|---|---|
2000-01-01 | 2.428019 | 2.317165 | 1.186934 |
2000-01-02 | 1.040802 | -2.269797 | 0.580195 |
2000-01-03 | -2.392500 | 0.298097 | 0.407541 |
2000-01-04 | -0.945231 | -0.258435 | -0.290456 |
也可以用.fill_na()
方法为缺失值补上默认值:
df.fillna(value=100)
a | b | c | d | e | |
---|---|---|---|---|---|
2000-01-01 | 2.428019 | 2.317165 | 1.186934 | -0.208601 | -1.278155 |
2000-01-02 | 1.040802 | -2.269797 | 0.580195 | -0.241620 | -0.620173 |
2000-01-03 | -2.392500 | 0.298097 | 0.407541 | 100.000000 | 100.000000 |
2000-01-04 | -0.945231 | -0.258435 | -0.290456 | 100.000000 | 100.000000 |
这两种方法都返回一个新的DataFrame对象,对原对象不产生影响:
df
a | b | c | d | e | |
---|---|---|---|---|---|
2000-01-01 | 2.428019 | 2.317165 | 1.186934 | -0.208601 | -1.278155 |
2000-01-02 | 1.040802 | -2.269797 | 0.580195 | -0.241620 | -0.620173 |
2000-01-03 | -2.392500 | 0.298097 | 0.407541 | NaN | NaN |
2000-01-04 | -0.945231 | -0.258435 | -0.290456 | NaN | NaN |