在函数中的Pandas中追加Dataframe

时间:2015-02-27 17:55:32

标签: python pandas dataframe

我使用此功能和APScheduler每小时向Dataframe添加行。问题是每次运行它都会覆盖前一个条目,所以它不是真的"追加"任何东西。

def SMSx(frame):
    SMS(frame)
    frame = frame.append(SMS.SMSdf)
    frame = frame[frame.a != "test"]
    frame = DataFrame(frame, columns=['Time', 'Hour', 'Date', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'Total', 'Bucket'])
    frame.to_excel('Sprint_Log.xlsx', 'Sheet 1', index=False)
    SMSx.frame = frame

如果我使用完全相同的代码(如下)并手动运行它可以正常工作。我不太清楚这里发生了什么。 SMS.SMSdf是来自SMS功能的数据帧。

SMS(frame)
frame = frame.append(SMS.SMSdf)
frame = frame[frame.a != "test"]
frame = DataFrame(frame, columns=['Time', 'Hour', 'Date', 'Day', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'Total', 'Bucket'])
frame.to_excel('Sprint_Log.xlsx', 'Sheet 1', index=False)
SMSx.frame = frame

感谢您的帮助!

有效的代码:

def SMSx(frame_temp, frame_perm):
    SMS(frame_temp)
    try:
        frame_perm = DataFrame.from_csv('Sprint_Log.csv')
    except:
        pass
    frame_perm = frame_perm.append(SMS.SMSdf)
    frame_perm = frame_perm.drop_duplicates()
    frame_perm = frame_perm[frame_perm.Ready != "test"]
    frame_perm = DataFrame(frame_perm, columns=['Time', 'Hour', 'Date', 'Day', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'Total', 'Bucket'])
    frame_perm.to_csv('Sprint_Log.csv')
    SMSx.frame2 = frame_perm

1 个答案:

答案 0 :(得分:1)

我怀疑的问题是您没有return更新的frame变量。当您在函数范围内分配SMSx变量时,只要函数退出就会丢失。我不确定这是如何工作的,因为你没有先定义SMSx变量(它是当前函数的名称,还是一个全局变量?)

def SMSx(frame):
    SMS(frame)
    frame = frame.append(SMS.SMSdf)
    frame = frame[frame.a != "test"]
    frame = DataFrame(frame, columns=['Time', 'Hour', 'Date', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'Total', 'Bucket'])
    frame.to_excel('Sprint_Log.xlsx', 'Sheet 1', index=False)
    return frame


while True:
     frame = SMSx(frame)  # The returned frame will be used on the next iteration

如果没有看到您的其他代码,很难看到您正在尝试做的事情。