子集pandas dataframe时忽略KeyError

Ssa*_*ank 3 python pandas

我有一个带有列city1,city2,city3,city4,city5的熊猫数据框df。我有一个列表my_cities = [“ city1”,“ city3”,“ city10”]。我想根据my_cities中的列对df进行子集设置。

my_cities = [“ city1”,“ city3”,“ city10”]

df_my_cities = df [my_cities]

我收到错误KeyError:“ ['city10']不在索引中”

如果来自my_cities的元素不在df中,我如何告诉代码继续执行?

jez*_*ael 7

您可以intersection在所有列和之间使用list

df_my_cities = df[df.columns.intersection(my_cities)]
Run Code Online (Sandbox Code Playgroud)

样品:

df = pd.DataFrame({'city1':['s', 'e'],
                   'city2':['e','f'],
                   'city3':['f','g'],
                   'city4':['r','g'],
                   'city5':['t','m']})

print (df)
  city1 city2 city3 city4 city5
0     s     e     f     r     t
1     e     f     g     g     m

my_cities = ["city1","city3","city10"]
df_my_cities = df[df.columns.intersection(my_cities)]
print (df_my_cities)
  city1 city3
0     s     f
1     e     g
Run Code Online (Sandbox Code Playgroud)

或者numpy.intersect1d

df_my_cities = df[np.intersect1d(df.columns, my_cities)]
print (df_my_cities)
  city1 city3
0     s     f
1     e     g
Run Code Online (Sandbox Code Playgroud)