Pandas处理缺失值

Pandas将None和NaN视为缺失值,并提供了isnull(), notnull(), dropna()和fillna()等方法进行处理。isnull()和notnull()用于标记缺失值,dropna()用于删除含有缺失值的行或列,fillna()则用于填充缺失值,支持数字填充、前向填充和后向填充等策略。本文详细介绍了这些方法在DataFrame中的应用。" 100668355,6872716,Vue实现表格导出到Excel的步骤与问题解析,"['Vue', '前端开发', 'Excel导出', 'Web开发']

Pandas基本上把None和NaN看成是可以等价交换的缺失值形式。为了完成这种交换过程,Pandas提供了一些方法来发现、剔除、替换数据结构中的缺失值,主要包括isnull()、notnull()、dropna()、fillna()。

1、isnull()

        创建一个布尔类型的掩码标签缺失值,是发现缺失值的一种。返回布尔类型的掩码数据,布尔类型掩码数组可以直接作为Series或DataFrame的索引使用。

#代码
import pandas as pd
import numpy as np

data = pd.Series([1, np.nan, 'hello', None])

data.isnull()

#结果
data
0        1
1      NaN
2    hello
3     None
dtype: object

data.isnull()
0    False
1     True
2    False
3     True
dtype: bool

2、notnull()

        与isnull()操作相反,是发现缺失值的一种。返回布尔类型的掩码数据,布尔类型掩码数组可以直接作为Series或DataFrame的索引使用。

#代码
import pandas as pd
import numpy as np

data = pd.Series([1, np.nan, 'hello', None])
data.notnull()

#结果
0     True
1    False
2     True
3    False
dtype: bool

#代码
import pandas as pd
import numpy as np

data = pd.Series([1, np.nan, 'hello', None])
data[data.notn
### 如何使用 Pandas 处理 DataFrame 中的缺失值 #### 填充缺失值 可以采用向上或向下填充的方式处理缺失值。创建一个包含缺失值的数据框后,通过 `fillna` 方法指定填充方式。 ```python import pandas as pd import numpy as np data = np.random.randn(7, 4) # 生成7行4列的随机数 df = pd.DataFrame(data) df.loc[5, 3] = np.nan # 将数据中的一个值修改为缺失值 # 向前填充(使用前面最近的有效观测值) filled_df_forward = df.fillna(method='ffill') # 向后填充(使用后面最近的有效观测值) filled_df_backward = df.fillna(method='bfill') ``` 上述代码展示了两种不同的填充策略:向前填充和向后填充[^2]。 #### 删除含有缺失值的记录 另一种常见的做法是从数据集中移除那些存在缺失值的行或列。对于删除操作而言,可以根据实际需求灵活调整参数设置。 - **按行删除** 如果希望去除任何包含缺失值的整行,则可调用 dropna 函数并省略默认参数: ```python clean_rows_df = df.dropna() ``` - **按列删除** 当某些特定条件下才允许保留某列时,可以通过设定最小有效观察次数来决定是否丢弃该列。例如,当一列至少有两次非空条目才能被保存下来的情况下: ```python import pandas as pd import numpy as np df = pd.DataFrame({ 'A': [1, 2, np.nan], 'B': [np.nan, 5, 6], 'C': [7, 8, 9] }) non_missing_count = df.count() # 计算每列中非缺失值的数量 threshold = 2 # 设定阈值 filtered_columns_df = df.drop( non_missing_count[ non_missing_count < threshold].index.values, axis=1 # 按照列方向进行筛选 ) print(filtered_columns_df) ``` 这段脚本实现了基于给定条件过滤掉不符合标准的列[^3]。 #### 替换缺失值为固定数值或其他表达式的结果 除了简单地复制临近单元格的内容外,还可以考虑更复杂的替换方案,比如平均值、众数或是自定义函数计算得出的新值等。 ```python mean_value = df.mean().iloc[0] # 获取首列均值作为替代项 replaced_with_mean_df = df.fillna(mean_value) custom_function_result = lambda x: (x.max() + x.min()) / 2 replaced_with_custom_func_df = df.apply(custom_function_result).fillna(value=np.nan) ``` 这些例子说明了如何利用统计量或者其他逻辑运算来进行更加精细的填补工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值