【问题标题】:How a dataframe with a dynamic number of columns can be filtered?如何过滤具有动态列数的数据框?
【发布时间】:2021-06-05 18:23:53
【问题描述】:

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

始终包含在数据框中的列是 id 列。潜在列的名称是:col1, col2, col3, col4, col5, col6id 列除外)。

我只想选择所有列中不包含nan 的数据框行。有一种情况,dataframe 只能包含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

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

提前谢谢你!

【问题讨论】:

  • 试试:df = df.set_index('id').dropna().reset_index()
  • 稍作修改:df = df.set_index('id').dropna(how="all").reset_index()
  • 他想要获取至少有一个 NaN 值的行,这段代码没有给出所有 NaN 值的行。
  • 哦,省略了一个参数。谢谢提醒。
  • 不应该是 "Select rows with at least 1 non-nan element" 等同于 "Exclude rows with all nan elements" 吗?

标签: python pandas filter dynamic nan


【解决方案1】:

用途:

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

【讨论】:

  • 非常感谢@SeaBean :)
猜你喜欢
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
相关资源
最近更新 更多