如何在保持原有索引的前提下为Pandas数据集添加新行
Pandas数据集添加行并保持连续索引
原数据集代码
import pandas as pd data = [("Il nome della rosa","Umberto Eco", 1980), ("L'amore che ti meriti","Daria Bignardi", 2014), ("Memorie dal sottsuolo", " Fëdor Dostoevskij", 1864), ("Oblomov", "Ivan Alexandrovich Goncharov ", 1859)] index = range(1,5,1) data = pd.DataFrame(data, columns = ["Books'Title", "Authors", "Publishing Year"], index = index) pubhouses = ["Bompiani", "Mondadori", "Rizzoli", "Feltrinelli"] data.insert(3, 'Publication House', pubhouses)
待添加的数据
newbook1 = ['Il demone meschino', 'Fëdor Sologub', 1907, 'Feltrinelli'] newbook2 = ['le anime morte', 'Nikolaj Vasilevič Gogol Janovskij', 1882, 'Garzanti']
原代码的问题
你写的data.loc[len(data.index[-1] + 1)] = [newbook1, newbook2]有两处错误:
- 语法错误:
data.index[-1]是当前数据集最后一个索引值(比如4),直接加1就是下一个索引,不需要用len()函数包裹,len()是用来计算序列长度的,这里完全用错场景。 - 维度不匹配:试图一次性给
loc传入两个列表,这会导致Pandas无法识别,因为loc一次赋值一行需要对应一个列表,而非嵌套列表。
修复后的方案
方案一:用pd.concat合并(推荐,适合批量添加行)
先把新数据构造成和原数据集结构一致的DataFrame,再合并:
# 构造新数据的DataFrame,指定列名和连续索引 new_df = pd.DataFrame( [newbook1, newbook2], columns=data.columns, index=[data.index[-1]+1, data.index[-1]+2] ) # 合并原数据集和新数据 data = pd.concat([data, new_df])
方案二:逐行添加(适合少量行)
直接通过loc指定新索引,逐行赋值:
# 添加第一行 data.loc[data.index[-1] + 1] = newbook1 # 添加第二行,此时最后一个索引已经变成5,加1就是6 data.loc[data.index[-1] + 1] = newbook2
运行任意一种方案后,数据集的索引会从1连续到6,符合需求。
内容的提问来源于stack exchange,提问作者12666727b9
相关产品推荐
相关产品推荐

