Pandas技术问询:如何将数据框中含元组的列拆分为两列并替换原列
解决CSV列拆分问题:将元组格式列转为两列
看起来你遇到的核心问题是分隔符匹配偏差加上原代码的赋值逻辑有误——直接把拆分后的DataFrame赋值给原列,会导致DataFrame结构冲突,最终只保留了第一列。下面给你几个更简洁高效的解决方案:
情况1:列值是字符串格式的"元组"(如"10.000 , 20.000")
这是最常见的场景,推荐用str.split的expand=True参数直接生成新列,再合并到原DataFrame:
方案A:固定分隔符拆分
如果你的字符串格式统一是数值 , 数值(逗号前后有空格),可以直接指定分隔符为, :
# 拆分列,expand=True会直接返回包含两列的DataFrame split_df = brokerMktPrices["nameOfColumn"].str.split(', ', expand=True) # 给新列命名 split_df.columns = ['firstNewColumn', 'secondNewColumn'] # 合并原DataFrame(删除旧列)和新列 brokerMktPrices = pd.concat([brokerMktPrices.drop("nameOfColumn", axis=1), split_df], axis=1)
方案B:兼容任意空格的正则拆分
如果字符串里的空格不固定(比如有的是10.000,20.000,有的是10.000 , 20.000),用正则表达式匹配逗号前后的任意空格:
split_df = brokerMktPrices["nameOfColumn"].str.split(r'\s*,\s*', expand=True) split_df.columns = ['firstNewColumn', 'secondNewColumn'] brokerMktPrices = pd.concat([brokerMktPrices.drop("nameOfColumn", axis=1), split_df], axis=1)
情况2:列值是真实的Python元组(而非字符串)
如果你的列里存储的是真正的元组对象(比如(10.000, 20.000)),不需要用str.split,直接用apply(pd.Series)展开:
split_df = brokerMktPrices["nameOfColumn"].apply(pd.Series) split_df.columns = ['firstNewColumn', 'secondNewColumn'] brokerMktPrices = pd.concat([brokerMktPrices.drop("nameOfColumn", axis=1), split_df], axis=1)
为什么你之前的代码失效?
你原来的代码brokerMktPrices["nameOfColumn"] = pd.DataFrame(...)是把一个DataFrame赋值给原DataFrame的单一列,这会导致Pandas只保留新DataFrame的第一列(因为原列只能容纳一维数据),所以第二列丢失。正确的逻辑是新增列而非替换原列,上面的方案都是通过合并的方式直接把新列加入原DataFrame,更简洁高效。
内容的提问来源于stack exchange,提问作者Jannik
相关产品推荐
相关产品推荐

