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

如何向Pandas DataFrame追加字符串?代码报错及修改咨询

解决Pandas DataFrame追加字符串时的报错问题

嘿,我来帮你搞定这个Pandas的报错问题~你遇到的cannot concatenate object of type '<class 'str'>'; only Series and DataFrame objs are valid错误,核心原因是Pandas的append()方法不接受直接传入字符串,它只认Series或者DataFrame对象。而且你之前的片段1其实也有隐性问题,只是没触发报错而已——allBooks.append(newBook)这行代码根本没修改原DataFrame,因为append()默认返回新对象,不会原地修改原数据。

先拆解问题根源

不管是片段1还是片段2,你想实现的是把字符串作为行索引,同时给对应列赋值,但直接用append(字符串)的方式完全不符合Pandas的规则。我们需要换一种正确的方式来添加行。

片段2的修改方案(推荐用loc,更高效)

loc是Pandas里用来定位行/列的利器,直接用它添加带索引的行是最直观且高效的方式,而且还能避免append()在新版本Pandas中被弃用的问题。修改后的完整代码如下:

import pandas as pd

# 初始化DataFrame
userData = pd.DataFrame(columns=['fname','lname','dob','pwd'])

# 获取用户输入
fname = input("Please enter your first name. ")
lname = input("Please enter your last name. ")
dob = input("Please enter your DOB MM/DD/YYYY ")
pwd = input("Type in the password you want to use. ")

# 生成用户ID
dobSeperate = dob.split("/")
idChars = str(dobSeperate[1]) + str((dobSeperate[2])[2:4])
userId = fname.lower() + idChars

print("This is your user ID, please write it down:", userId)
print("This is your password, please remember it:", pwd)

# 核心修改:用loc直接添加带索引的行
# 格式:df.loc[行索引] = [列1值, 列2值, ...],顺序要和DataFrame的columns对应
userData.loc[userId] = [fname, lname, dob, pwd]

# 可选:保存到CSV
userData.to_csv('user_inventory.csv', index=True)  # index=True保留行索引(也就是userId)

print(userId)
print(userData)  # 可以打印看结果

如果你坚持要用append()(不推荐,Pandas 2.0+已弃用)

如果一定要用append(),需要把要添加的内容包装成Series对象,同时指定索引(对应DataFrame的列名)和行名称(也就是你的userId),还要记得把append()的返回值重新赋值给原DataFrame(因为它不会原地修改):

# 替代loc的部分,用append实现
new_user = pd.Series(
    [fname, lname, dob, pwd],
    index=userData.columns,  # 对应DataFrame的列
    name=userId  # 这就是行索引
)
userData = userData.append(new_user)

顺便修正片段1的隐性问题

你的片段1里allBooks.append(newBook)其实没生效,正确的写法应该和上面一样,用loc直接添加:

import pandas as pd

allBooks = pd.DataFrame(columns=['Copies'])
newBook = input("Enter the title of the book you wish to add ")
newCopies = int(input("Enter the amount of copies of this book "))

# 直接用loc添加行和列值
allBooks.loc[newBook, 'Copies'] = newCopies

allBooks.to_csv(r'totalInventory.csv', index=True)

这样就能顺利实现你想要的“把字符串作为索引追加到DataFrame并赋值”的功能啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:22:27