我已经定义了一个空数据框,其中包含
df = pd.DataFrame(columns=['Name', 'Weight', 'Sample'])
并希望在for循环中添加行,如下所示:
for key in my_dict:
...
row = {'Name':key, 'Weight':wg, 'Sample':sm}
df = pd.concat(row, axis=1, ignore_index=True)
但我得到这个错误
cannot concatenate object of type '<class 'str'>'; only Series and DataFrame objs are valid
如果我使用df = df.append(row, ignore_index=True)
,它可以工作,但似乎append
被弃用了。所以,我想使用concat()
。我该如何解决这个问题?
3条答案
按热度按时间sdnqo3pr1#
您可以在PandasDataFrame中转换您的字典
2ekbmq322#
Concat需要一个系列或df对象的列表作为第一个参数。
fcipmucu3#
正如user7864386所建议的,最有效的方法是收集
dict
,然后将它们连接起来,但是如果由于某种原因必须在循环中添加行,则更有效的方法是.loc
,因为这样就不必首先将dict
转换为单行DataFrame
:要正确地对此进行基准测试相当困难,因为该行的
%timeit
将增大DataFrame
,并使调用随时间推移而变慢,而另一种方法不会使
df
发生突变,并且df = ...
不能被%timeit
艾德,因为它会导致UnboundLocalError
。不过,在一个%timeit
之前运行一个%timeit
,在另一个%timeit
之后运行一个%timeit
,让我假设速度优势为2倍。