簡體   English   中英

有沒有一種優化方法可以將一個大的 dataframe 列表列轉換為多行(Pandas)?

[英]Is there an optimize way to turn a large dataframe column of lists into multiple rows (Pandas)?

我正在使用 Jupyter Notebook 編寫腳本,將由列表組成的 dataframe 列轉換為行(對於列表中的每 9 個元素,我想要一行,每個元素在不同的列中),我需要你的幫助。 現在我設法讓它在幾行上工作(比如前一百行或在我的示例中有索引 7160、7161、7162 的三行),但是一旦我在整個 dataframe(11535 行 x 6 列)上執行此操作有時列表很長)我遇到了主要的性能問題並且腳本無限期運行。 有沒有辦法優化我的代碼,使其適用於我的(大)dataframe 的每一行,而不僅僅是幾行? 我也試過 with.iterrows 但結果是一樣的。

總而言之,我現在想要與我的代碼完全相同的行為,但在 dataframe 上完全沒有無限期運行或崩潰。

下面兩張截圖幫助大家理解:

現在我的“df”是這樣的,我的結果是“newdf 是這樣的” 我的代碼:

newdf = pd.DataFrame(columns=('index','MCC','MNC','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'Latitude', 'Longitude', 'Altitude'), dtype=object)

#for z in df.index: <= i want this but runs indefinitely...
for z in [7160,7161,7162]: #<= working smoothly for a few rows
    MCC = df['MCC'][z]
    MNC = df['MNC'][z]
    A = df['Latitude [°]'][z]
    B = df['Longitude [°]'][z]
    C = df['Altitude (m)'][z]
    E = list(chunks(df['List'][z],9))

    i = 0
    while i < len(E):
        j = 0
        values_to_add = {'index':z, 'MCC': MCC, 'MNC': MNC, 'A': E[i][0], 'B': E[i][1], 'C': E[i][2], 'D': E[i][3], 'E': E[i][4], 'F': E[i][5], 'G': E[i][6], 'H': E[i][7], 'I': E[i][8], 'Latitude': A, 'Longitude': B, 'Altitude': C}
        row_to_add = pd.Series(values_to_add, name=i)
        newdf = pd.concat([newdf,pd.DataFrame([row_to_add])])
        i = i + 1
newdf

非常感謝您的幫助。

你可以試試:

pd.DataFrame(df['List'].tolist()).join(df.drop(columns='List'))

這里的基本思想是使用帶有列表的列作為新 dataframe 的輸入,然后將這些列放回原來的 dataframe(刪除列表列)。

暫無
暫無

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

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