在Python或Pandas中如何将特定子字符串分配到指定列
实现方法
你现在的问题是split仅按顺序拆分内容,没有和目标列做匹配,只要把每行拆分后的内容转为和列名对应的映射,pandas会自动按列名填充值,不用管原始字符串里的内容顺序。
核心代码实现
假设你待拆分的列存储的内容格式为配料名:用量,按逗号分隔,需要输出指定顺序的配料用量列:
import pandas as pd # 1. 按你需要的输出顺序定义所有目标列名 target_columns = ["面粉", "鸡蛋", "牛奶", "盐", "白砂糖"] # 2. 定义单行处理函数,把字符串转为对应目标列的取值 def parse_ingredient_line(line): # 拆分出每个配料项 items = line.strip().split(",") # 生成配料名-用量的映射字典 ing_map = {} for item in items: if ":" not in item: continue name, value = item.strip().split(":", 1) ing_map[name.strip()] = value.strip() # 按目标列顺序返回取值,不存在的配料返回空值 return pd.Series([ing_map.get(col, pd.NA) for col in target_columns], index=target_columns) # 3. 对原始待拆分列应用处理函数,得到最终结果 # 这里把df['待拆分列名']替换为你实际的列名即可 result_df = df['待拆分列名'].apply(parse_ingredient_line) result_df.head()
变体场景(判断配料是否存在)
如果你的原始内容只有配料名,不需要用量,只需要在对应列标注是否包含该配料,修改处理函数即可:
def check_ingredient_exist(line): exist_ings = [i.strip() for i in line.strip().split(",")] # 包含填1,不包含填0,也可以根据需要改成True/False或者'是'/'否' return pd.Series([1 if col in exist_ings else 0 for col in target_columns], index=target_columns)
效果说明
这个方法完全不受原始字符串里配料顺序的影响,所有值都会自动匹配到你指定的列下,缺失的配料自动留空,和你要的输出效果完全一致。
内容的提问来源于stack exchange,提问作者Dpak
相关产品推荐
相关产品推荐

