Python中匹配两个Pandas DataFrame列名并筛选对应列的问题
解决Pandas按另一个DataFrame列名筛选列的问题
嘿,我懂你遇到的小麻烦了——你已经找对了获取匹配列名的方法,但还差最后一步把数据提取出来!
问题回顾
你有两个DataFrame:
- df1 包含列
a、b、c、d,两行数据 - df2 包含列
b、c,一行数据
你需要通用地提取df1中与df2列名重叠的所有列(也就是b、c),同时保留df1的所有行,不需要硬编码列名。
正确的解决方案
df1.columns.intersection(df2.columns)确实能帮你拿到两个DataFrame共有的列名,但这只是一个列名的Index对象,你需要用它来筛选df1的列,而不是只打印这个Index本身。
完整代码示例
import pandas as pd # 构造你的示例数据 df1 = pd.DataFrame([[1,2,3,4], [5,6,7,8]], columns=['a', 'b', 'c', 'd']) df2 = pd.DataFrame([[12,13]], columns=['b', 'c']) # 1. 获取两个DataFrame共有的列名 common_columns = df1.columns.intersection(df2.columns) # 2. 用共有的列名筛选df1 result_df = df1[common_columns] # 查看结果 print(result_df)
输出结果
b c 0 2 3 1 6 7
更简洁的链式写法
如果想少写一行代码,也可以直接链式调用:
result_df = df1[df1.columns.intersection(df2.columns)]
为什么你之前的尝试没拿到数据?
df1.columns.intersection(df2.columns)返回的是列名的集合(Index类型),它本身不包含任何数据。只有把这个集合作为参数传给df1的列索引(也就是df1[xxx]的方括号里),Pandas才会帮你提取对应列的所有行数据。
内容的提问来源于stack exchange,提问作者Stupid420
相关产品推荐
相关产品推荐

