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

使用Pandas创建多DataFrame及处理含逗号单元格的CSV转换需求

我来帮你搞定这两个需求,先从CSV的数据拆分开始,再讲如何用Pandas创建包含多个DataFrame的结构:

1. 处理CSV文件,拆分多颜色行

你的需求是把包含多个颜色的行拆分成单独行,每个行只保留一个颜色,其他颜色位置填0。这里我们用Pandas来实现:

完整代码

import pandas as pd

# 读取CSV文件,注意分隔符是分号
df = pd.read_csv('your_fruits.csv', sep=';')

# 处理空的颜色列:把空值/空字符串转成空列表
df['Fruit_Color'] = df['Fruit_Color'].apply(
    lambda x: x.split(',') if pd.notna(x) and x.strip() else []
)

# 定义函数,把单一行扩展成对应颜色数量的多行
def expand_color_rows(row):
    colors = row['Fruit_Color']
    expanded_rows = []
    
    # 遍历每个颜色,生成对应行:当前颜色填值,其他两个颜色位填0
    for idx, color in enumerate(colors):
        color_cols = ['0'] * 3
        color_cols[idx] = color
        expanded_rows.append({
            'Fruit_Type': row['Fruit_Type'],
            'Color1': color_cols[0],
            'Color2': color_cols[1],
            'Color3': color_cols[2],
            'Fruit_Description': row['Fruit_Description']
        })
    
    # 如果没有颜色,生成一行全0的颜色列
    if not colors:
        expanded_rows.append({
            'Fruit_Type': row['Fruit_Type'],
            'Color1': '0',
            'Color2': '0',
            'Color3': '0',
            'Fruit_Description': row['Fruit_Description']
        })
    
    return pd.DataFrame(expanded_rows)

# 应用函数到每一行,合并所有结果
final_df = pd.concat(df.apply(expand_color_rows, axis=1).tolist(), ignore_index=True)

# 保存处理后的CSV
final_df.to_csv('expanded_fruits.csv', sep=';', index=False)

代码说明

  • 读取CSV时指定分隔符为;,避免和单元格内的逗号冲突
  • 把Fruit_Color列拆分成颜色列表,空值转为空列表
  • 对每一行,根据颜色数量生成对应行数:每个颜色占据一个颜色列,其他列填0;无颜色时生成全0行
  • 最后合并所有行并保存为新的CSV

运行后你会得到和期望一致的结果,比如Apple会生成3行,Banana生成2行,Grape生成1行全0颜色的行。

2. 创建包含多个DataFrame的DataFrame

Pandas允许DataFrame的单元格存储任意对象,包括其他DataFrame。我们可以直接创建一个外层DataFrame,把子DataFrame作为单元格值存入:

完整代码

import pandas as pd

# 先创建几个示例子DataFrame
apple_df = pd.DataFrame({
    'Color': ['Green', 'Red', 'Yellow'],
    'Stock': [100, 150, 80]
})

banana_df = pd.DataFrame({
    'Color': ['Green', 'Yellow'],
    'Stock': [50, 200]
})

orange_df = pd.DataFrame({
    'Color': ['Red', 'Yellow'],
    'Stock': [70, 120]
})

# 创建外层DataFrame,包含子DataFrame
container_df = pd.DataFrame({
    'Fruit_Type': ['Apple', 'Banana', 'Orange'],
    'Fruit_Data': [apple_df, banana_df, orange_df]
})

# 查看结果
print(container_df)

# 访问某个子DataFrame,比如Apple的数据
print("\nApple的详细数据:")
print(container_df.loc[container_df['Fruit_Type'] == 'Apple', 'Fruit_Data'].iloc[0])

代码说明

  • 先定义需要嵌套的子DataFrame,每个子DataFrame可以对应不同的水果数据
  • 外层DataFrame的Fruit_Data列存储这些子DataFrame
  • 通过loc结合iloc可以轻松取出某个单元格里的子DataFrame进行操作

这样你就得到了一个包含多个DataFrame的DataFrame结构,方便统一管理不同的数据集。

内容的提问来源于stack exchange,提问作者ECA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:17:05