You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

需求:基于大小写与单复数无关映射,将指定列名与列数据转为字典

解决方案:忽略大小写与单复数匹配DataFrame列生成字典

没问题,我来帮你搞定这个需求!核心就是要解决大小写不敏感和单复数形式兼容的匹配问题,把Col_values里的每个元素对应到DataFrame中最匹配的列,再提取非空值生成目标字典。

实现思路

  1. 单复数统一:用inflect库将所有单词转换为单数形式,这样不管是dragon还是dragons都能匹配上;
  2. 大小写统一:把Col_values元素和DataFrame列名都转为小写,消除大小写差异;
  3. 列匹配与值提取:遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:36:40