【发布时间】:2021-06-05 18:23:53
【问题描述】:
我使用 url 调用下载数据。数据框的列不是静态的。例如,对于一个 url 调用,数据框可以包含 x 列,而对于另一个 url 调用,它可以包含 y 列等。
始终包含在数据框中的列是 id 列。潜在列的名称是:col1, col2, col3, col4, col5, col6(id 列除外)。
我只想选择所有列中不包含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
例如,从上面的数据框中,我只想选择行 0、1 和 3。
第二个 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