pandas 使用concat()向 Dataframe 追加行

apeeds0o  于 2023-03-11  发布在  其他
关注(0)|答案(3)|浏览(238)

我已经定义了一个空数据框,其中包含

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()。我该如何解决这个问题?

sdnqo3pr

sdnqo3pr1#

您可以在PandasDataFrame中转换您的字典

import pandas as pd
df = pd.DataFrame(columns=['Name', 'Weight', 'Sample'])
for key in my_dict:
  ...
  #transform your dic in DataFrame
  new_df = pd.DataFrame([row])
  df = pd.concat([df, new_df], axis=0, ignore_index=True)
2ekbmq32

2ekbmq322#

Concat需要一个系列或df对象的列表作为第一个参数。

import pandas as pd

my_dict = {'the_key': 'the_value'}

for key in my_dict:
   row = {'Name': 'name_test', 'Weight':'weight_test', 'Sample':'sample_test'}
   df = pd.concat([pd.DataFrame(row, index=[key])], axis=1, ignore_index=True) 

print(df)
         0          1           2
the_key name_test   weight_test sample_test
fcipmucu

fcipmucu3#

正如user7864386所建议的,最有效的方法是收集dict,然后将它们连接起来,但是如果由于某种原因必须在循环中添加行,则更有效的方法是.loc,因为这样就不必首先将dict转换为单行DataFrame

df.loc[len(df),:] = row

要正确地对此进行基准测试相当困难,因为该行的%timeit将增大DataFrame,并使调用随时间推移而变慢,而另一种方法

pd.concat([df, pd.DataFrame(row)], axis=0, ignore_index=True)

不会使df发生突变,并且df = ...不能被%timeit艾德,因为它会导致UnboundLocalError。不过,在一个%timeit之前运行一个%timeit,在另一个%timeit之后运行一个%timeit,让我假设速度优势为2倍。

相关问题