如何在pandas中向数据框添加新行?

34

这是我使用的代码:

iname = "name1"    
ipassword = "password1"
iemail = "email@domain.com"
res1 = []
df = pd.read_csv("login.csv", sep=',', encoding="utf-8")
res1.append(iname,ipassword,iemail)
print(res1,res2,res3)
df.to_csv("login.csv", index=False)

如何使用pandas数据框将名称、密码和电子邮件存储在csv文件中?

login.csv

name     password     email
admin    admin        asdfs
zds      sd           dsssfsfd
vipul    rao          dsfdsfs
5个回答

65

另一种简单的方法是使用pd.Dataframe.loc方法。

row = [iname, ipassword, iemail]
df.loc[len(df)] = row
df.to_csv("login.csv", index=False)

4
你好。确实是个不错的答案。我只是想知道为什么在这种情况下 df.iloc[len(df)]=row 不能起作用? - badavadapav
5
设计决策,iloc不能扩展其目标对象,但是loc可以。 - smcs
@smcs 扩大目标对象是什么意思? - Connor
1
@Connor 目标对象是数据框,添加新行后,它会比之前更大,具体取决于列数。 - smcs
1
@smcs 非常感谢!像这样的东西效率如何?使用 loc 扩大数组还是先创建类似字典的东西更快? - Connor

9

使用 -

iname = "name1"    
ipassword = "password1"
iemail = "email@domain.com"

df2 = df.append(pd.DataFrame([[iname,ipassword,iemail]], columns
=df.columns))
df2.to_csv("login.csv", index=False)

输出

    name   password             email
0  admin      admin             asdfs
1    zds         sd          dsssfsfd
2  vipul        rao           dsfdsfs
0  name1  password1  email@domain.com

这只是一个示例,但它是用户输入,因此必须是一个变量。 - vipul-rao
@vipul-rao 我已经包含了更新后的变量,请检查。如果您想要“追加”多行,这也将支持。 - Vivek Kalyanarangan

4
你可以使用 pd.DataFrame.loc 将一行添加到你的数据框中:
iname = "name1"    
ipassword = "password1"
iemail = "email@domain.com"

df = pd.read_csv("login.csv", sep=',', encoding="utf-8")

df.loc[df.index.max()+1] = [iname, ipassword, iemail]

df.to_csv("login.csv", index=False)

2

如果你只是在追加行,那么接受的答案是很好的。然而,如果你进行其他操作,比如:

df.drop_duplicates(subset=['name'],inplace=True)

然后一些索引值将大于数据框的大小,接受的答案可能会覆盖现有行。

在这种情况下,我建议:

row = [iname, ipassword, iemail]
df.loc[max(df.index)+1] = row
df.to_csv("login.csv", index=False)

如果数据框可能为空,则可能需要变为:

row = [iname, ipassword, iemail]
if len(df.index)>0:
    df.loc[max(df.index)+1] = row
else:
    df.loc[len(df)] = row
df.to_csv("login.csv", index=False)

这应该是正确的接受答案。当我删除一行然后尝试在末尾添加一个新行时,遇到了同样的问题,使用 df.loc[len(df)] = ... 会覆盖最后一行现有数据。 - user164863

2
一个好的方法是首先创建一个空列表,将其填充,然后像这样将其添加到空数据框中。
data=[]

for i, row in new_df.head(4).iterrows():
    sequence=str(row['body'])
    author=row['author']
    data.append([author,sequence]) 
d=pd.DataFrame(data,columns = ['author', 'results'])

它将会给出以下这样的结果: enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接