在pandas DataFrame中删除包含相同值的行。

17 浏览
0 Comments

在pandas DataFrame中删除包含相同值的行。

我目前正在处理一个类似下面的数据框:

artist week1 week2 week3 week4
Drake 2 2 3 1
Muse NA NA NA NA
Bruno Mars 3 3 4 2
Imagine Dragons NA NA NA NA
Justin Timberlake 2 2 NA 1

我想要做的是删除只包含“NA”值的行。结果应该是这样的:

artist week1 week2 week3 week4
Drake 2 2 3 1
Bruno Mars 3 3 4 2
Justin Timberlake 2 2 NA 1

我尝试使用pandas的drop()函数,但它会删除至少有一个“NA”值的行。在这种情况下,Justin Timberlake的行将被删除,但这不是我需要的。

0
0 Comments

问题的出现原因是希望从pandas DataFrame中删除包含相同值的行。解决方法有两种:

1. 使用df.dropna()函数,并设置how='all',表示如果一行或一列中所有的值都是NA,则删除该行或该列。然后设置subset参数为需要检查的列。

df = df.dropna(how='all', subset=['week1', 'week2', 'week3', 'week4'])
print(df)

这将删除所有在'week1'、'week2'、'week3'和'week4'列中所有值都是NA的行。

2. 保留至少有2个非NA值的行。

df = df.dropna(thresh=2)
print(df)

这将删除所有只有一个或没有非NA值的行。

对于第一个解决方法中的问题补充:如果列的数量过多,无法逐个列出每一列的名称,是否有其他方法设置subset参数?例如,如果有300个周的列。

答案是可以使用df.columns获取所有列名,并将其作为subset参数的值。下面是示例代码:

df = df.dropna(how='all', subset=df.columns)
print(df)

这将删除所有值都是NA的行。

0