需求:基于大小写与单复数无关映射,将指定列名与列数据转为字典
解决方案:忽略大小写与单复数匹配DataFrame列生成字典
没问题,我来帮你搞定这个需求!核心就是要解决大小写不敏感和单复数形式兼容的匹配问题,把Col_values里的每个元素对应到DataFrame中最匹配的列,再提取非空值生成目标字典。
实现思路
- 单复数统一:用
inflect库将所有单词转换为单数形式,这样不管是dragon还是dragons都能匹配上; - 大小写统一:把
Col_values元素和DataFrame列名都转为小写,消除大小写差异; - 列匹配与值提取:遍历
Col_values,找到匹配的DataFrame列,提取该列的非空值组成列表,最终构建目标字典。
完整代码示例
首先确保安装了必要的库(如果没装过inflect的话):
pip install inflect pandas
然后是Python代码:
import pandas as pd import inflect # 初始化单复数转换引擎 p = inflect.engine() # 定义你的数据 Col_values = ['App','dragons'] data = { 'apps': ['apple','air','ant','alpha','axis','angry','attack'], 'b': ['bat','ball','biscuit','batch','bag','catch',None], 'c': ['cat','can','camel','came','come',None,None], 'dragon': ['dance','dog','doll','disc','dell',None,None], 'e': ['eat','ear','enter','end',None,None,None] } df = pd.DataFrame(data) # 辅助函数:找到匹配的列名 def find_matching_col(target, df_columns): # 把目标转为小写+单数 target_normalized = p.singular_noun(target.lower()) or target.lower() for col in df_columns: # 列名也转为小写+单数 col_normalized = p.singular_noun(col.lower()) or col.lower() if col_normalized == target_normalized: return col return None # 构建目标字典 OutDict = {} for key in Col_values: matched_col = find_matching_col(key, df.columns) if matched_col: # 提取非空值并转为列表 non_null_values = df[matched_col].dropna().tolist() OutDict[key] = non_null_values print(OutDict)
代码解释
inflect.engine():用来处理单复数转换,p.singular_noun()会把复数转为单数,如果输入已经是单数则返回None,所以用or来兜底;find_matching_col函数:负责将目标字符串和列名都标准化(小写+单数),然后找到匹配的列;dropna().tolist():提取列中的非空值,转为列表,正好符合你期望的输出格式。
运行结果
执行代码后会输出:
{'App': ['apple', 'air', 'ant', 'alpha', 'axis', 'angry', 'attack'], 'dragons': ['dance', 'dog', 'doll', 'disc', 'dell']}
完全符合你的期望!
内容的提问来源于stack exchange,提问作者Gnaneshwar Babu
相关产品推荐
相关产品推荐

