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

如何将Entry类属性按列对应行写入Pandas DataFrame?

问题描述

我定义了Entry类,包含column、task、desc、member、timeline字符串属性。需求是将每个Entry实例的属性写入Pandas DataFrame对应列:column指定列名,其余4个属性填入该列的连续4行。

当前实现的问题是:添加新列的Entry时,其属性会追加在之前列的索引之后,导致各列内容错位。错误输出如下:

indexcolumn 1column 2column 3column 4
0Task: textNaNNaNNaN
1Description: textNaNNaNNaN
2Assigned Member: textNaNNaNNaN
3Timeline: textNaNNaNNaN
4NaNTask: textNaNNaN
5NaNDescription: textNaNNaN
6NaNAssigned Member: textNaNNaN
7NaNTimeline: textNaNNaN
8NaNNaNTask: textNaN
9NaNNaNDescription: textNaN
10NaNNaNAssigned Member: textNaN
11NaNNaNTimeline: textNaN
12NaNNaNNaNTask: text
13NaNNaNNaNDescription: text
14NaNNaNNaNAssigned Member: text
15NaNNaNNaNTimeline: text

初始代码:

import pandas as pd

class Entry:
    def __init__(self, column, task, desc, member, timeline):
        self.column = column
        self.task = f"Task: {task}"
        self.desc = f"Description: {desc}"
        self.member = f"Assigned Member: {member}"
        self.timeline = f"Timeline: {timeline}"
        
def enter_entries(df, entries):
    for entry in entries:
        df = df._append({entry.column: entry.task}, ignore_index=True)
        df = df._append({entry.column: entry.desc}, ignore_index=True)
        df = df._append({entry.column: entry.member}, ignore_index=True)
        df = df._append({entry.column: entry.timeline}, ignore_index=True)
    return df

# Create the DataFrame
df = pd.DataFrame(columns=['column 1', 'column 2', 'column 3', 'column 4'])

#Backlog Entry 
entry = Entry('column 1', 'text', 'text', 'text', 'text')

#Doing Entry
entry2 = Entry('column 2', 'text', 'text', 'text', 'text')

#Review Entry
entry3 = Entry('column 3', 'text', 'text', 'text', 'text')

#Done Entry
entry4 = Entry('column 4', 'text', 'text', 'text', 'text')

#Add each entry to the entries list
entries = [entry, entry2, entry3, entry4]

df = enter_entries(df, entries)

display(df)
解决方法

原代码中_append会逐行新增记录,导致每列内容依次向后堆叠,无法对齐。需要改为为每个列一次性填充4行数据。

方案1:直接构造数据字典生成DataFrame

这是最简洁的方式,先将所有Entry的属性整理为字典(键为列名,值为属性列表),再生成DataFrame:

import pandas as pd

class Entry:
    def __init__(self, column, task, desc, member, timeline):
        self.column = column
        self.task = f"Task: {task}"
        self.desc = f"Description: {desc}"
        self.member = f"Assigned Member: {member}"
        self.timeline = f"Timeline: {timeline}"

# 初始化Entry实例
entry = Entry('column 1', 'text', 'text', 'text', 'text')
entry2 = Entry('column 2', 'text', 'text', 'text', 'text')
entry3 = Entry('column 3', 'text', 'text', 'text', 'text')
entry4 = Entry('column 4', 'text', 'text', 'text', 'text')
entries = [entry, entry2, entry3, entry4]

# 构造数据字典
data = {}
for entry in entries:
    data[entry.column] = [entry.task, entry.desc, entry.member, entry.timeline]

# 创建并展示DataFrame
df = pd.DataFrame(data)
display(df)

方案2:修改现有填充逻辑(保留空DataFrame初始化)

如果需要保留初始的空DataFrame结构,可通过指定行索引来填充对应列的内容:

import pandas as pd

class Entry:
    def __init__(self, column, task, desc, member, timeline):
        self.column = column
        self.task = f"Task: {task}"
        self.desc = f"Description: {desc}"
        self.member = f"Assigned Member: {member}"
        self.timeline = f"Timeline: {timeline}"

def enter_entries(df, entries):
    row_count = 4  # 每个列固定4行内容
    for entry in entries:
        # 按行索引依次填充对应属性
        df.loc[0, entry.column] = entry.task
        df.loc[1, entry.column] = entry.desc
        df.loc[2, entry.column] = entry.member
        df.loc[3, entry.column] = entry.timeline
    return df

# 初始化指定4行的空DataFrame
df = pd.DataFrame(index=range(4), columns=['column 1', 'column 2', 'column 3', 'column 4'])

# 初始化Entry实例
entry = Entry('column 1', 'text', 'text', 'text', 'text')
entry2 = Entry('column 2', 'text', 'text', 'text', 'text')
entry3 = Entry('column 3', 'text', 'text', 'text', 'text')
entry4 = Entry('column 4', 'text', 'text', 'text', 'text')
entries = [entry, entry2, entry3, entry4]

df = enter_entries(df, entries)
display(df)

最终效果

两种方案都会生成对齐的DataFrame:

indexcolumn 1column 2column 3column 4
0Task: textTask: textTask: textTask: text
1Description: textDescription: textDescription: textDescription: text
2Assigned Member: textAssigned Member: textAssigned Member: textAssigned Member: text
3Timeline: textTimeline: textTimeline: textTimeline: text

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:56:05