如何筛选具有动态列数的数据帧?

2024-05-02 11:03:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用url调用下载数据。dataframe的列不是静态的。例如,在一个url调用中,数据帧可以包含x列,而在另一个url调用中,它可以包含y列等

始终包含在数据帧中的列是id列。潜在列的名称为:col1, col2, col3, col4, col5, col6(除了id列)

我只想选择数据帧中所有列中不包含nan的行。在这种情况下,数据帧只能包含id列,因此不需要选择任何行

假设一个url调用使用以下假设代码给出以下数据帧:

data = {'id': [1000,2000,3000,4000],
        'col1': [np.nan,25000,np.nan,np.nan],
        'col2': [np.nan,27000,np.nan,30000],
        'col3': [28000,np.nan,np.nan,25000]
        }

dfexp = pd.DataFrame(data, columns = ['id', 'col1', 'col2', 'col3'])

     id     col1     col2     col3
0  1000      NaN      NaN  28000.0
1  2000  25000.0  27000.0      NaN
2  3000      NaN      NaN      NaN
3  4000      NaN  30000.0  25000.0

例如,在上面的数据框中,我只想选择行013

第二个url调用可以使用以下假设代码提供潜在的数据帧:

data2 = {'id': [1500,2500,3500,4500],
        'col1': [1900,np.nan,np.nan,np.nan],
        'col4': [np.nan,np.nan,np.nan,np.nan],
        'col5': [np.nan,np.nan,np.nan,np.nan],
        'col6': [np.nan,np.nan,np.nan,25000]
        }

dfexp2 = pd.DataFrame(data, columns = ['id', 'col1', 'col4', 'col5', 'col6'])

     id     col1 col4 col5 col6
0  1500      NaN  NaN  NaN  NaN
1  2500  25000.0  NaN  NaN  NaN
2  3500      NaN  NaN  NaN  NaN
3  4500      NaN  NaN  NaN  NaN

从第二个数据帧中,我只想选择行1

通常,我只想选择至少有1non-nan元素的行。我是一个初学者,动态的东西对我来说很棘手。你有什么想法吗

提前谢谢你


1条回答
网友
1楼 · 发布于 2024-05-02 11:03:00

使用:

df.set_index('id').dropna(how='all').reset_index()

解释

你是初学者,让我解释一下

这将(步骤1)临时将列id设置为索引,然后(步骤2)删除包含所有nan元素的所有行(原始列id除外,因为它现在是索引,在dropna()调用中不会检查nan值的索引。)我们需要包含参数how='all'(感谢提醒anon01)因为默认值是how='any',每当任何一列包含nan时,它都会删除这些行。之后,我们可以(步骤3)通过调用reset_index()从索引移回列来恢复列id

相关问题 更多 >