当我们处理数据时,经常会遇到空数据(NaN)。Pandas是一种广泛使用的数据分析工具,提供了多种处理空数据的方法。在本文中,我们将讲解在Pandas中处理NaN值的方法的完整攻略。
查找NaN值
在开始处理NaN值之前,我们需要先查找空数据。为此,我们可以使用isnull()
方法或notnull()
方法。这两个方法都返回一个布尔值的DataFrame,对于空数据返回True,否则返回False。
import pandas as pd
import numpy as np
data = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': [5, np.nan, 7, np.nan],
'C': [8, 9, 10, 11]
})
print(data.isnull())
该代码输出:
A B C
0 False False False
1 False True False
2 True False False
3 False True False
我们可以看到,对于包含空值的单元格,isnull()
方法返回了True。
删除NaN值
在处理包含NaN值的DataFrame时,我们有时需要将包含空值的行或列删除。在Pandas中,我们可以使用dropna()
方法来删除包含NaN值的行或列。
import pandas as pd
import numpy as np
data = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': [5, np.nan, 7, np.nan],
'C': [8, 9, 10, 11]
})
print(data.dropna())
该代码输出:
A B C
0 1.0 5.0 8
我们可以看到,该方法删除了包含NaN值的行。
除了使用dropna()
方法删除行或列外,我们还可以使用fillna()
方法填充NaN值。
import pandas as pd
import numpy as np
data = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': [5, np.nan, 7, np.nan],
'C': [8, 9, 10, 11]
})
print(data.fillna(0))
该代码输出:
A B C
0 1.0 5.0 8
1 2.0 0.0 9
2 0.0 7.0 10
3 4.0 0.0 11
我们可以看到,该方法用0填充了包含NaN值的单元格。
示例说明
假设我们有一个表格,记录了四个人的语文、数学和英语成绩。其中,第一行是表头。
name,chinese,math,english
A,60,70,80
B,70,80,NaN
C,80,NaN,90
D,NaN,85,95
现在,我们需要进行数据清洗,将包含NaN值的行或列删除,并将其他包含NaN值的单元格填充为0。
import pandas as pd
import numpy as np
data = pd.read_csv('data.csv')
# 删除包含NaN值的行和列
data = data.dropna(how='any', axis=0)
data = data.dropna(how='any', axis=1)
# 将包含NaN值的单元格填充为0
data = data.fillna(0)
print(data)
该代码输出:
name chinese math english
0 A 60 70 80
我们可以看到,代码正确地删除了3行1列,并将包含NaN值的单元格填充为0。
另外,我们也可以使用平均值或中位数填充包含NaN值的单元格。
import pandas as pd
import numpy as np
data = pd.read_csv('data.csv')
# 删除包含NaN值的行和列
data = data.dropna(how='any', axis=0)
data = data.dropna(how='any', axis=1)
# 将包含NaN值的单元格填充为平均值
mean_value = data.mean()
data = data.fillna(mean_value)
print(data)
该代码输出:
name chinese math english
0 A 60 70 80
我们可以看到,该代码用平均值填充了包含NaN值的单元格。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Pandas中处理NaN值的方法 - Python技术站