簡體   English   中英

append 到 pandas 數據幀的新行的最快方法

[英]Fastest way to append a new row to a pandas data frame

我想在不使用df.loc的情況下將 append 一行到 pandas 數據幀。 我正在尋找類似於列表中使用的.append()方法的東西。

我目前這樣做,但我正在尋找不同的解決方案:

stupid_table = pd.DataFrame(columns=['max_depth', 'features'])
for max_depth in np.arange(50, 101):
    new_row = pd.DataFrame({'max_depth':[max_depth], 'features':[10]})
    stupid_table = pd.concat([stupid_table, new_row], axis=0)

我想將new_row聲明為列表或 pandas 系列,而不是 pandas 數據框。 有沒有辦法使以下語法起作用?

stupid_table = pd.DataFrame(columns=['max_depth', 'features'])
for max_depth in np.arange(50, 101):
    new_row = [max_depth, 10]
    stupid_table = pd.concat([stupid_table, new_row], axis=0)

我特別想這樣做,因為我想要 append 新行的真實數據框有很多列,我懶得把新行寫成字典。 我寧願在列表中輸入數字。 我經常這樣做,更方便的語法會對我的心理健康產生奇跡。

編輯:我不喜歡使用.loc ,因為我的 for 循環正在獲取 numpy arrays 中的每個值。 將當前語法切換為for value in range(len(np.arange(start, stop)))以使 for 循環使用索引,然后我必須將組合轉換為數值,因為在實際示例中,我有很多組合。 我寧願不那樣做。

與您的描述盡可能接近的解決方案是:

import numpy as np
import pandas as pd

stupid_table = pd.DataFrame(columns=['max_depth', 'features'])
for max_depth in np.arange(50, 101):
    new_row = [max_depth, 10]
    new_df = pd.DataFrame({head: [val] for head, val in zip(stupid_table.columns, new_row)})
    stupid_table = pd.concat([stupid_table, new_df], axis=0)

但是,這不是有效的,因為主 dataframe stupid_table的表正在您的主循環中重新分配。 理想情況下,您可以將所有新數據幀保存到新列表中的 append 並最后進行連接。 這不包括對新創建的 dataframe 的索引重置,但這樣做可能是個好主意。

import numpy as np
import pandas as pd

stupid_table = pd.DataFrame(columns=['max_depth', 'features'])
data_frames = [stupid_table]
for max_depth in np.arange(50, 101):
    new_row = [max_depth, 10]
    data_frames.append(pd.DataFrame({head: [val] for head, val in zip(stupid_table.columns, new_row)}))
stupid_table = pd.concat(data_frames, axis=0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM