Python 无法使用Pandas删除NaN值
我试图使用Panda提供的dropna()方法删除NaN值。我已经阅读了文档并查看了其他StackOverflow帖子,但仍然无法修复错误 对于我的代码,我将首先读取一个excel文件。如果行的值为“-”,我会将其更改为NaN值。之后,我将使用方法dropna()删除NaN值。然后,我会将dropna()方法的结果重新分配给名为mydf2的新变量。下面是我的代码和屏幕截图Python 无法使用Pandas删除NaN值,python,pandas,Python,Pandas,我试图使用Panda提供的dropna()方法删除NaN值。我已经阅读了文档并查看了其他StackOverflow帖子,但仍然无法修复错误 对于我的代码,我将首先读取一个excel文件。如果行的值为“-”,我会将其更改为NaN值。之后,我将使用方法dropna()删除NaN值。然后,我会将dropna()方法的结果重新分配给名为mydf2的新变量。下面是我的代码和屏幕截图 mydf = pd.read_excel('pandas lab datasets/singstats_maritalsta
mydf = pd.read_excel('pandas lab datasets/singstats_maritalstatus.xlsx',
na_values='-')
mydf = mydf.set_index(['Variables'])
print(mydf.head(5)) # Original data
mydf2 = mydf.dropna()
print(mydf2)
听起来像
NaN
是一个字符串,所以:
mydf2 = mydf.replace('-',np.nan).dropna()
听起来这里的
NaN
是一个字符串,所以:
mydf2 = mydf.replace('-',np.nan).dropna()
我在这里写了一段代码,它可以很好地处理我的数据,所以试试这个
mydf = pd.read_excel('pandas lab datasets/singstats_maritalstatus.xlsx')
to_del = []
for i in range(mydf.shape[0]):
if "-" in list(mydf.iloc[i]):
to_del.append(i)
out_df = mydf.drop(to_del, axis=0)
我在这里写了一段代码,它可以很好地处理我的数据,所以试试这个
mydf = pd.read_excel('pandas lab datasets/singstats_maritalstatus.xlsx')
to_del = []
for i in range(mydf.shape[0]):
if "-" in list(mydf.iloc[i]):
to_del.append(i)
out_df = mydf.drop(to_del, axis=0)
由于您尚未发布数据,我不确定是否每一行都有NaN值。如果是这样,df.dropna()将简单地删除每一行。例如,1981和1982列都是图像中的NaN值。使用
df.dropna(axis=1)
将删除这两列,并且不会返回空df
df = pd.DataFrame({'Variables':['Total','Single','Married','Widowed','Divorced/Separated'],
'1980':range(5),
'1981':[np.nan]*5})
df.set_index('Variables')
df.dropna(axis=1)
由于您尚未发布数据,我不确定是否每一行都有NaN值。如果是这样,df.dropna()将简单地删除每一行。例如,1981和1982列都是图像中的NaN值。使用
df.dropna(axis=1)
将删除这两列,并且不会返回空df
df = pd.DataFrame({'Variables':['Total','Single','Married','Widowed','Divorced/Separated'],
'1980':range(5),
'1981':[np.nan]*5})
df.set_index('Variables')
df.dropna(axis=1)
dropna()工作正常。您有两个print语句。第一个语句按照print(mydf.head(5))
的要求打印了五行
第二个打印语句print(mydf2)
的输出是一个空数据框[0行37列],因为显然每行都有一个NaN。(请参见屏幕截图底部)dropna()工作正常。您有两个打印语句。第一个打印语句按照print的要求打印了五行(mydf.head(5))
第二个打印语句
print(mydf2)
的输出是一个空数据框[0行37列],因为每一行都有一个NaN。(请参见屏幕截图底部)您好,我尝试了您的代码,但仍然不起作用。我使用mydf.dtypes检查了每个列的数据类型。我发现带有NaN值的列实际上是浮动的64。我该怎么办?@Issaki您确定mydf2=mydf.dropna()
不起作用?是的,我已经仔细检查了我的代码,但仍然不起作用work@Issaki当您更改此行时,我的代码是否有效:mydf=pd.read\u excel('pandas lab datasets/singstats\u maritalstatus.xlsx',na\u values='-')
到mydf=pd.read\u excel('pandas lab datasets/singstats\u maritalstatus.xlsx'))
?它不起作用。因为值“-”没有注册为NaN值Hi,我尝试了你的代码,但仍然不起作用。我用mydf.dtypes检查了每列的数据类型。我意识到带有NaN值的列实际上是浮动的64。我该怎么办?@Issaki你确定mydf2=mydf.dropna()
不起作用?是的,我已经仔细检查了我的代码,但仍然不起作用work@Issaki当您更改此行时,我的代码是否有效:mydf=pd.read\u excel('pandas lab datasets/singstats\u maritalstatus.xlsx',na\u values='-')
到mydf=pd.read\u excel('pandas lab datasets/singstats\u maritalstatus.xlsx'))
?它不起作用。因为值“-”未注册为NaN值,但我的目标是删除所有值为“-”的行。因此,我必须使用na_值=“-”将“-”转换为NaN值。然后,我将使用dropna()。但我的目标是删除所有值为“-”的行。”。因此,我必须使用na_values='-'将'-'转换为NaN值。然后,我将使用dropna()。如果您的目的是删除包含NaN值的列,则语句应为mydf2=mydf.dropna(axis=1),因为默认值是axis=0,它会删除行。如果您的目的是删除包含NaN值的列,那么语句应该是mydf2=mydf.dropna(axis=1),因为默认值是axis=0,它会删除行。