Skip to main content
 首页 » 编程设计

python之使用 isin 从列表中获取数据框列

2025年05月04日26mate10pro

我有一个数据框 df1,我有一个列表,其中包含 df1 的几列的名称。

df1: 
User_id  month  day  Age   year    CVI    ZIP    sex  wgt 
0           1    7   16    1977     2      NA    M    NaN 
1           2    7   16    1977     3      NA    M    NaN 
2           3    7   16    1977     2      DM    F    NaN 
3           4    7   16    1977     7      DM    M    NaN 
4           5    7   16    1977     3      DM    M    NaN 
...        ...    ...  ...   ...   ...     ...  ...  ... 
35544      35545   12   31  2002    15      AH  NaN  NaN 
35545      35546   12   31  2002    15      AH  NaN  NaN 
35546      35547   12   31  2002    10      RM    F   14 
35547      35548   12   31  2002     7      DO    M   51 
35548      35549   12   31  2002     5     NaN  NaN  NaN 
 
 list= [u"User_id", u"day", u"ZIP", u"sex"] 

我想创建一个新的数据框df2,它只包含列表中的那些列,以及一个数据框df3,它包含不在列表中的列列表。

Here我发现我需要做:

df2=df1[df1[df1.columns[1]].isin(list)] 

但结果我得到:

Empty DataFrame 
Columns: [] 
Index: [] 
[0 rows x 9 columns] 

我做错了什么,我怎样才能得到所需的结果?如果应该是 4 列,为什么是“9 列”?

请您参考如下方法:

解决方案 Index.difference :

L = [u"User_id", u"day", u"ZIP", u"sex"] 
 
df2 = df1[L]  
df3 = df1[df1.columns.difference(df2.columns)] 
print (df2) 
   User_id  day  ZIP sex 
0        0    7  NaN   M 
1        1    7  NaN   M 
2        2    7   DM   F 
3        3    7   DM   M 
4        4    7   DM   M 
 
print (df3) 
   Age  CVI  month  wgt  year 
0   16    2      1  NaN  1977 
1   16    3      2  NaN  1977 
2   16    2      3  NaN  1977 
3   16    7      4  NaN  1977 
4   16    3      5  NaN  1977 

或者:

df2 = df1[L]  
df3 = df1[df1.columns.difference(pd.Index(L))] 
print (df2) 
   User_id  day  ZIP sex 
0        0    7  NaN   M 
1        1    7  NaN   M 
2        2    7   DM   F 
3        3    7   DM   M 
4        4    7   DM   M 
 
print (df3) 
   Age  CVI  month  wgt  year 
0   16    2      1  NaN  1977 
1   16    3      2  NaN  1977 
2   16    2      3  NaN  1977 
3   16    7      4  NaN  1977 
4   16    3      5  NaN  1977