Pandas 将空值(空格)替换为NaN
在本文中,我们将介绍如何使用Pandas将DataFrame中的空值(包括空格)替换为NaN。
阅读更多:Pandas 教程
什么是NaN?
NaN是一种缺失值类型,它表示“非数字”或无效数值。在Pandas中,NaN用于表示缺失或无效值。
Pandas中的缺失值
Pandas中有两种主要的对象:Series和DataFrame。这些对象通常包含缺失值。
在Pandas中,空值通常表示为None或NaN。但是,在某些情况下,空格(空字符串)也可能被视为缺失值。
例如,考虑以下简单的DataFrame:
import pandas as pd
data = {'Name': ['John', 'Mike', 'Sara', 'Kate', 'Dave', 'Jessica'],
'Age': [23, 31, 19, None, 42, 28],
'Gender': ['M', 'M', "", 'F', 'M', 'F']}
df = pd.DataFrame(data)
在这个DataFrame中,年龄列(Age)中有一个空值(None),而性别列(Gender)中有一个空格(””)。
我们可以使用isna()函数来查找DataFrame中的缺失值:
print(df.isna())
输出为:
Name Age Gender
0 False False False
1 False False False
2 False False True
3 False True False
4 False False False
5 False False False
上述代码中,isna()函数返回一个布尔值DataFrame,其中缺失值是True,否则是False。
我们可以看到,年龄(Age)列中有一个True值,表示它包含一个NaN值,而性别(Gender)列中有一个True值,表示它包含一个空字符串(空格)。
如果我们希望将空格视为NaN,我们可以使用replace()函数来替换值:
df = df.replace("", pd.NA)
这将把DataFrame中的所有空字符串(空格)替换为NaN。
现在我们再次调用isna()函数,查看DataFrame中的缺失值:
print(df.isna())
输出为:
Name Age Gender
0 False False False
1 False False False
2 False False True
3 False True False
4 False False False
5 False False False
我们可以看到,性别(Gender)列中的空字符串已经替换为了NaN。
处理字符串
如果DataFrame中包含字符串列,则可以使用strip()函数来删除字符串两侧的空格,然后再使用replace()函数将空字符串替换为NaN。
例如,考虑以下包含字符串列的DataFrame:
data = {'Name': [' John', 'Mike ', 'Sara', ' Kate', ' Dave ', 'Jessica '],
'Age': [23, 31, 19, None, 42, 28],
'Gender': ['M', 'M', "", 'F', ' ', 'F']}
df = pd.DataFrame(data)
在这个DataFrame中,姓名(Name)列和性别(Gender)列中包含了多余的空格。
我们可以使用strip()函数来删除这些空格,并使用replace()函数将空字符串替换为NaN:
df['Name'] = df['Name'].str.strip()
df['Gender'] = df['Gender'].str.strip().replace("", pd.NA)
我们可以使用head()函数来查看修改后的DataFrame的前几行:
print(df.head())
输出为:
Name Age Gender
0 John 23.0 M
1 Mike 31.0 M
2 Sara 19.0 <NA>
3 Kate NaN F
4 Dave 42.0 <NA>
现在,姓名(Name)列和性别(Gender)列中的空格已经被删除,并且性别(Gender)列中的空字符串也已被替换为NaN。
处理数字
如果DataFrame中包含数字列,则可以使用fillna()函数来将NaN值替换为特定的值。例如,我们可以将NaN值替换为某个数字,如0。
例如,考虑以下包含数字列的DataFrame:
data = {'Name': ['John', 'Mike', 'Sara', 'Kate', 'Dave', 'Jessica'],
'Age': [23, 31, 19, None, 42, None],
'Height (cm)': [180, 165, None, 170, 175, None]}
df = pd.DataFrame(data)
在这个DataFrame中,年龄(Age)列和身高(Height)列中包含NaN值。
要将NaN值替换为0,我们可以使用fillna()函数:
df = df.fillna(0)
现在,我们再次调用isna()函数,查看DataFrame中的缺失值:
print(df.isna())
输出为:
Name Age Height (cm)
0 False False False
1 False False False
2 False False True
3 False True False
4 False False False
5 False True False
我们可以看到,年龄(Age)列和身高(Height)列中的所有NaN值都已被替换为0。
总结
在Pandas中,NaN用于表示缺失或无效值,空字符串(空格)有时也被视为缺失值。
我们可以使用isna()函数来查找DataFrame中的缺失值,并使用replace()函数将空字符串(空格)替换为NaN。如果DataFrame中包含字符串列,则可以使用strip()函数来删除字符串两侧的空格,然后再使用replace()函数将空字符串替换为NaN。
对于数字列,我们可以使用fillna()函数将NaN值替换为特定的值。
通过处理缺失值,我们可以更好地理解和分析数据,并提高模型的准确性和可靠性。
极客教程