在pandas DataFrame中删除包含相同值的行。
在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的行将被删除,但这不是我需要的。
问题的出现原因是希望从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
的行。