如何给Pandas DataFrame添加行?新手循环追加报错求助
解决Pandas追加行时的TypeError问题
你的代码存在的关键错误
- 字典键未加引号:
{Name: 'John'}里的Name必须是字符串格式'Name',否则Python会将其视为未定义变量,引发语法错误 - 字典访问方式错误:普通字典不能用
.访问属性,需改用person['Name']这种键索引方式 append()方法误用参数:Pandas的DataFrame.append()没有axis参数,该参数属于pd.concat(),添加后会直接导致参数错误- 数据顺序不匹配:你的Series数据顺序和列顺序
['Ticker', 'Name', 'Age', 'Height']不对应,'N/A'应该对应第一列Ticker
修正后的代码示例
方法1:修复append的使用(注意:append已在Pandas 2.0+版本弃用,仅作基础演示)
import pandas as pd myCols = ['Ticker', 'Name', 'Age', 'Height'] finalData = pd.DataFrame(columns=myCols) # 修正字典键为字符串,修复语法错误 listOfPerson = [ {'Name': 'John', 'Age': '27', 'Height': '115'}, {'Name': 'Jill', 'Age': '25', 'Height': '110'} ] for person in listOfPerson: # 修正数据顺序匹配列索引,用字典键取值,移除无效的axis参数 finalData = finalData.append( pd.Series( ['N/A', person['Name'], person['Age'], person['Height']], index=myCols ), ignore_index=True ) print(finalData)
方法2:推荐使用pd.concat(高效且无弃用风险)
避免在循环内重复合并,先收集所有行数据再一次性合并,效率更高:
import pandas as pd myCols = ['Ticker', 'Name', 'Age', 'Height'] finalData = pd.DataFrame(columns=myCols) listOfPerson = [ {'Name': 'John', 'Age': '27', 'Height': '115'}, {'Name': 'Jill', 'Age': '25', 'Height': '110'} ] # 先收集所有待追加的行数据 rows_to_append = [] for person in listOfPerson: row_series = pd.Series( ['N/A', person['Name'], person['Age'], person['Height']], index=myCols ) rows_to_append.append(row_series) # 一次性完成合并 finalData = pd.concat([finalData] + rows_to_append, ignore_index=True) print(finalData)
更高效的简化写法
直接构造符合列结构的字典列表,转成DataFrame后合并,完全避免循环操作:
import pandas as pd myCols = ['Ticker', 'Name', 'Age', 'Height'] finalData = pd.DataFrame(columns=myCols) listOfPerson = [ {'Name': 'John', 'Age': '27', 'Height': '115'}, {'Name': 'Jill', 'Age': '25', 'Height': '110'} ] # 直接构造目标结构的字典列表 new_data = [ {'Ticker': 'N/A', 'Name': p['Name'], 'Age': p['Age'], 'Height': p['Height']} for p in listOfPerson ] # 合并数据 finalData = pd.concat([finalData, pd.DataFrame(new_data)], ignore_index=True) print(finalData)
关于concat方法的补充说明
你之前遇到concat提示不存在的问题,大概率是调用方式错误:concat是Pandas的顶级函数,需用pd.concat()调用,而非finalData.concat()。
内容的提问来源于stack exchange,提问作者AbbasK
相关产品推荐
相关产品推荐

