我有以下串列:
dates = ['12/29/2020', '12/25/2020', '12/22/2020']
numbers = [ [1, 31, 35], [17, 23, 36], [29, 53, 56] ]
我用它們制作了一個 DataFrame:
df = pd.DataFrame(
{
'date':dates,
'nums': numbers
}
)
這給了我一個包含兩列的 DataFrame。我想拆分串列中的元素以創建 3 列(串列中的每個數字一列),最終得到以下 DataFrame:
date num1 num2 num3
0 '12/29/2020' 1 31 35
1 '12/25/2020' 17 23 36
2 '12/22/2020' 29 53 56
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
nums通過首先將列轉換為串列,然后與date列連接,從列創建一個新資料框:
pd.concat([df.date, pd.DataFrame(df.nums.to_list()).add_prefix('num')], axis=1)
date num0 num1 num2
0 12/29/2020 1 31 35
1 12/25/2020 17 23 36
2 12/22/2020 29 53 56
uj5u.com熱心網友回復:
創建一個新的資料框并將其連接回來:
>>> df[['date']].join(pd.DataFrame(df['num'].tolist()).rename(lambda x: f'num{x 1}', axis=1))
date num1 num2 num3
0 12/29/2020 1 31 35
1 12/25/2020 17 23 36
2 12/22/2020 29 53 56
>>>
或者只是add_prefix:
>>> df[['date']].join(pd.DataFrame(df['num'].tolist()).add_prefix('num'))
date num0 num1 num2
0 12/29/2020 1 31 35
1 12/25/2020 17 23 36
2 12/22/2020 29 53 56
>>>
uj5u.com熱心網友回復:
您可以使用這樣的資料框建構式:
pd.DataFrame(numbers,
index=dates,
columns=[f'num{i 1}' for i in range(len(numbers))])\
.rename_axis('dates').reset_index()
輸出:
dates num1 num2 num3
0 12/29/2020 1 31 35
1 12/25/2020 17 23 36
2 12/22/2020 29 53 56
uj5u.com熱心網友回復:
因此,其他答案足以涵蓋您需要修復現有資料框的情況,但以防萬一,在創建資料框之前簡單地修復資料要容易得多:
In [1]: import pandas as pd
In [2]: dates = ['12/29/2020', '12/25/2020', '12/22/2020']
In [3]: numbers = [[1, 31, 35], [17, 23, 36], [29, 53, 56]]
In [4]: nums = {f"num{i}": n for i, n in enumerate(zip(*numbers), 1)}
In [5]: df = pd.DataFrame({"dates": dates, **nums})
In [6]: df
Out[6]:
dates num1 num2 num3
0 12/29/2020 1 31 35
1 12/25/2020 17 23 36
2 12/22/2020 29 53 56
或者,另一種方式:
In [7]: data = [[date, *nums] for date, nums in zip(dates, numbers)]
In [8]: pd.DataFrame(data, columns=["dates", "num1", "num2", "num3"])
Out[8]:
dates num1 num2 num3
0 12/29/2020 1 31 35
1 12/25/2020 17 23 36
2 12/22/2020 29 53 56
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311479.html
