在人工采集数据时,经常有可能把空值和空格混在一起,一般也注意不到在本来为空的单元格里加入了空格。这就给做数据处理的人带来了麻烦,因为空值和空格都是代表的无数据,而pandas中Series的方法notnull()会把有空格的数据也纳入进来,这样就不能完整地得到我们想要的数据了,这里给出一个简单的方法处理该问题。
方法1:
既然我们认为空值和空格都代表无数据,那么可以先得到这两种情况下的布尔数组。
这里,我们的DataFrame类型的数据集为df,其中有一个变量VIN,那么取得空值和空格的布尔数组为NONE_VIN。然后通过该布尔数组,就能得到我们要的数据了
1
2
3
|
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,否则就返回原值。
1
2
3
|
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替换成希望的值
1
2
3
4
5
6
7
8
|
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 )
|
输出结果:
1
2
3
4
5
6
|
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()来得到我们想要的数据。
以上这篇python pandas消除空值和空格以及 Nan数据替换方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/alanhu1024/article/details/49155891