python pandas消除空值和空格以及 Nan数据替换

本文介绍了两种处理数据集中空值和空格的方法。方法一通过构造布尔数组筛选空值和空格;方法二直接替换空格为NaN,再利用isnull()方法处理。文章还展示了如何将DataFrame中的NaN值替换为None。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在人工采集数据时,经常有可能把空值和空格混在一起,一般也注意不到在本来为空的单元格里加入了空格。这就给做数据处理的人带来了麻烦,因为空值和空格都是代表的无数据,而pandas中Series的方法notnull()会把有空格的数据也纳入进来,这样就不能完整地得到我们想要的数据了,这里给出一个简单的方法处理该问题。

###方法1:
既然我们认为空值和空格都代表无数据,那么可以先得到这两种情况下的布尔数组。
这里,我们的DataFrame类型的数据集为df,其中有一个变量VIN,那么取得空值和空格的布尔数组为NONE_VIN。然后通过该布尔数组,就能得到我们要的数据了

NONE_VIN = (df["VIN"].isnull()) | (df["VIN"].apply(lambda x: str(x).isspace()))
df_null = df[NONE_VIN]
df_not_null = df[~NONE_VIN]

###方法2:
直接使用Series的.apply方法来修改变量VIN中的每个值。如果发现是空格,就返回Nan,否则就返回原值。

df["VIN"]=df["VIN"].apply(lambda x: np.NaN if str(x).isspace() else x)
df_null = df[df["VIN"].isnull()]
df_not_null = df[df["VIN"].notnull()]

将dataframe中的NaN替换成希望的值

import pandas as pd
df1 = pd.DataFrame([{'col1':'a', 'col2':1}, {'col1':'b', 'col2':2}])
df2 = pd.DataFrame([{'col1':'a', 'col3':11}, {'col1':'c', 'col3':33}])

data = pd.merge(left=df1, right=df2, how='left', left_on='col1', right_on='col1')
print data
# 将NaN替换为None
print data.where(data.notnull(), None)

输出结果:

 col1  col2  col3
0    a     1    11
1    b     2   NaN
  col1  col2  col3
0    a     1    11
1    b     2  None

###总结:
方法1的思路就是直接判定是否为空格,把空格纳入到选择中来。方法2的思路是先把空格转换为NaN,然后正常使用.isnull()或.notnull()来得到我们想要的数据.

转载自:https://blog.youkuaiyun.com/alanhu1024/article/details/49155891

### 使用 Python Pandas 进行数据清洗的最佳实践 #### 数据加载与初步查看 为了有效地进行数据清洗,首先要确保能够正确读取并理解数据集的内容。通常会使用 `pandas.read_csv()` 或其他适合文件类型的函数来导入数据。 ```python import pandas as pd df = pd.read_csv('data.csv') print(df.head()) # 查看前几行数据以了解其结构[^2] ``` #### 处理缺失值 处理缺失值是数据预处理中的一个重要环节。可以采用删除含有缺失值的记录、填充特定数值或利用插补方法等方式解决这个问题。 - 删除有缺失值的行: ```python df_cleaned = df.dropna() ``` - 填充均值或其他统计量填补缺失值: ```python df['column_name'].fillna((df['column_name'].mean()), inplace=True) ``` 对于分类变量,则可能更倾向于用众数代替缺失值。 #### 解决重复项 识别并移除冗余的数据条目有助于提高分析准确性。`drop_duplicates()` 函数可以帮助完成这项工作。 ```python df_no_dupes = df.drop_duplicates(subset=['unique_column']) ``` 这里指定了要检查唯一性的列名作为参数传递给该函数。 #### 类型转换 有时原始数据集中某些字段被错误地标记成了字符串类型而非数字类型等情况发生;此时就需要调整这些字段的数据类型以便后续操作更加顺畅。 ```python df['numeric_col'] = pd.to_numeric(df['numeric_col'], errors='coerce') # 将无法解析为数字的部分设为空值(coerced to NaN) ``` #### 文本清理 当涉及到文本数据时,去除多余的空白字符、统一大小写以及标准化编码都是常见的做法。 ```python df['text_col'] = df['text_col'].str.strip().str.lower() ``` 以上命令实现了去首尾空格(`strip`) 转小写字母 (`lower`) 的功能。 通过上述步骤,已经涵盖了大部分基础层面的数据清洗技巧,在实际应用过程中还需要根据具体业务场景灵活运用各种工具技术手段进一步优化数据质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝鲸123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值