2 回答
TA贡献1735条经验 获得超5个赞
写入 csv 会创建一个新的 csv 并替换当前的 csv。这就是它写入第一行的原因:它实际上删除了前一行并写入空白文件。
您正在寻找的是附加df
到当前 csv 中。这可以通过以下方式完成:
df.to_csv('index.csv', index=False, mode='a', header=True)
注意我添加了mode='a'
。这意味着模式=追加。默认mode
为'w'
, 表示“写入”(覆盖)。
这种方式df
被添加到当前 csv 的最后一行。
如果您的 csv 有超过 2 行并且您只想更改第二行,您应该首先将所有 csv 加载到数据框。然后你可以只更改第二行 ( df.loc[1,:]=...
) 然后将它全部保存到 csv ( df.to_csv(r'index.csv', index =False, header=True
)
TA贡献1850条经验 获得超11个赞
好的,我自己解决了这个问题,方法是读取旧的 CSV 文件并将其合并并放入 CSV 文件中。你必须像我一样创建 CSV 文件 index.csv。然后将列名作为百分比和操作来工作。如果您的代码位置中没有 CSV 文件,将会出错。它会自动合并 CSV 文件中的最新输入而不删除任何行。
注意:index.csv、百分比和操作只是一个示例。你也可以使用你的。
import pandas as pd
import numpy as np
i = 1
def table_driven_agent(percept):
location=['A','B']
status=['clean','dirty']
percepts=[]
table=[location,status]
percepts.append(percept)
action = tableDrivenVaccum(percept,table)
if action == 'dirty':
action = dirty(percept[1])
return(action)
def tableDrivenVaccum(percept,table):
for i in table:
if i[0] == percept[0]:
return(i[1])
def dirty(percept):
if percept == 'A':
return('Go to B')
elif percept =='B':
return('Go to A')
while i < 6:
percept = list(map(str,input("Enter the status and position:").split(',')))
action = table_driven_agent(percept)
print(action)
df_old =pd.read_csv('index.csv')
newData=[[percept,action]]
colNames =df_old.columns
df_new = pd.DataFrame(data=newData, columns=colNames)
df_complete = pd.concat([df_old,df_new],axis=0)
df_complete.to_csv('index.csv',index=False)
#dict = {'percept': percept, 'action': action}
#df= pd.DataFrame(dict)
#df.to_csv(r'index.csv', index =False, header=True,mode='a')
i =1
添加回答
举报