如何通过从 python 中的选定行中删除 NULL 值来过滤数据框?
how to filter dataframe with removing NULL values from selected rows in python?
df=pd.DataFrame({'dept':['dept1','dept2','dept3','dept4','dept5'],
'room1':['0','1','1','NA','1'],
'room2':['1','0','NA','1','1'],
'room3':['0','0','1','NA','1'],
'room4':['1','NA','1','1','1'],
'count':['4','3','3','2','4']}
dept room1 room2 room3 room4 count
0 dept1 0 1 0 1 4
1 dept2 1 0 0 NA 3
2 dept3 1 NA 1 1 3
3 dept4 NA 1 NA 1 2
4 dept5 1 1 1 1 4
我有一个 select 框,用户可以在其中过滤所需的数据并根据他的 selection 显示记录。
预期结果:
if user select dept2 :
dept room1 room2 room3
0 dept2 1 0 0
if user select dept4:
dept room2 room4
0 dept4 1 1
代码:
option_dept = df["dept"].unique().tolist()
selected_dept = st.multiselect("search by departement",option_dept)
if selected_dept:
df= df[df["dept"].isin(selected_dept)]
st.write(df)
问题是使用此代码显示所有列
如何删除每个 selected 行中包含 NA 或 null 的列?
Select 仅 dept
和 room
列,将可能的字符串 NA
替换为 NaN
s 并删除缺失的列:
df= df[df["dept"].isin(selected_dept)].filter(regex='room|dept').replace('NA', np.nan).dropna(axis=1)
或者:
df= df[df["dept"].isin(selected_dept)].drop('count', axis=1).replace('NA', np.nan).dropna(axis=1)
假设用户选择 dept2
那么这段代码会给你想要的输出,
pd.DataFrame(df.loc[1, :].dropna()).T
输出-
dept
room1
room2
room3
count
1
dept2
1
0
0
3
对于其他dept
值,只需更改iloc
函数中的行号即可。您甚至可以使用 df.set_index("dept")
将数据帧的索引设置为该行的 dept
值,然后使用 df.loc["dept_2", :]
获取该行的数据。
df=pd.DataFrame({'dept':['dept1','dept2','dept3','dept4','dept5'],
'room1':['0','1','1','NA','1'],
'room2':['1','0','NA','1','1'],
'room3':['0','0','1','NA','1'],
'room4':['1','NA','1','1','1'],
'count':['4','3','3','2','4']}
dept room1 room2 room3 room4 count
0 dept1 0 1 0 1 4
1 dept2 1 0 0 NA 3
2 dept3 1 NA 1 1 3
3 dept4 NA 1 NA 1 2
4 dept5 1 1 1 1 4
我有一个 select 框,用户可以在其中过滤所需的数据并根据他的 selection 显示记录。
预期结果:
if user select dept2 :
dept room1 room2 room3
0 dept2 1 0 0
if user select dept4:
dept room2 room4
0 dept4 1 1
代码:
option_dept = df["dept"].unique().tolist()
selected_dept = st.multiselect("search by departement",option_dept)
if selected_dept:
df= df[df["dept"].isin(selected_dept)]
st.write(df)
问题是使用此代码显示所有列
如何删除每个 selected 行中包含 NA 或 null 的列?
Select 仅 dept
和 room
列,将可能的字符串 NA
替换为 NaN
s 并删除缺失的列:
df= df[df["dept"].isin(selected_dept)].filter(regex='room|dept').replace('NA', np.nan).dropna(axis=1)
或者:
df= df[df["dept"].isin(selected_dept)].drop('count', axis=1).replace('NA', np.nan).dropna(axis=1)
假设用户选择 dept2
那么这段代码会给你想要的输出,
pd.DataFrame(df.loc[1, :].dropna()).T
输出-
dept | room1 | room2 | room3 | count | |
---|---|---|---|---|---|
1 | dept2 | 1 | 0 | 0 | 3 |
对于其他dept
值,只需更改iloc
函数中的行号即可。您甚至可以使用 df.set_index("dept")
将数据帧的索引设置为该行的 dept
值,然后使用 df.loc["dept_2", :]
获取该行的数据。