如何通过列名而非索引访问DataFrame.itertuples中的元素?
用列名访问itertuples元素的可行方案
当然可以通过列名访问itertuples()返回的元素,不过要注意itertuples()返回的是namedtuple对象,不是字典,所以不能用i["Custom ID"]这种字典式索引,得用属性访问的写法,具体分两种情况处理:
情况1:调整列名(推荐)
如果可以修改DataFrame的列名,把带空格的列名改成合法的标识符(比如把"Custom ID"改成"Custom_ID"),就能直接用点号访问属性:
先修改列名:
df_1 = df_1.rename(columns={"Custom ID": "Custom_ID"})
再用属性名进行比较:
for i in df_1.itertuples(): for j in df_cs.itertuples(): if i.Custom_ID == j.Nodo_Cod: print("yes") break else: print("no")
情况2:保留原列名,用getattr方法
如果不想修改列名,Python的getattr()函数可以用来访问带空格或特殊字符的属性:
for i in df_1.itertuples(): for j in df_cs.itertuples(): if getattr(i, "Custom ID") == j.Nodo_Cod: print("yes") break else: print("no")
补充说明
itertuples()的性能比iterrows()更好,尤其是处理大DataFrame时,优先推荐上述两种基于itertuples()的方案。- 如果一定要用字典式索引,可以改用
df.iterrows(),它返回(index, Series)对,Series支持方括号列名访问,但性能会差一些。
内容的提问来源于stack exchange,提问作者alexm
相关产品推荐
相关产品推荐

