亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從數據框中包含的列表中將列動態添加到 pandas 數據框

從數據框中包含的列表中將列動態添加到 pandas 數據框

人到中年有點甜 2022-07-26 16:35:28
我有一個數據框,其中第一列包含一個隨機大小的列表,每個列表中從 0 到大約 10 個項目。此數據框還包含其他幾列數據。我想插入與最長列表的長度一樣多的列,然后按順序填充值,以便每一列在第一列的列表中都有一個項目。我不確定解決這個問題的好方法。sample = [[[0,2,3,7,8,9],2,3,4,5],[[1,2],2,3,4,5],[[1,3,4,5,6,7,8,9,0],2,3,4,5]]headers = ["col1","col2","col3","col4","col5"]df = pd.DataFrame(sample, columns = headers)在此示例中,我想在第 1 列之后添加 9 列,因為這是數據幀第三行中列表的最大長度。這些列將填充: 0 2  3    7    8     9  NULL NULL NULL in the first row, 1 2 NULL NULL NULL NULL NULL NULL NULL in the second, etc... 
查看完整描述

2 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

編輯以適應 OP 編輯

我就是這樣做的。首先,我將填充原始列的列表,使它們的長度都相同,并且更容易使用它們。之后就是創建列并用與列表中的位置對應的值填充它。假設我們的列表最大為 4 以作為一個更簡單的示例:


df = pd.DataFrame(sample, columns = headers)

df = df.rename(columns={'col1':'col_of_lists'})

max_length = max(df['col_of_lists'].apply(lambda x:len(x)))

df['col_of_lists'] = df['col_of_lists'].apply(lambda x:x + ([np.nan] * (max_length - len(x))))

for i in range(max_length):

    df['col_'+str(i)] = df['col_of_lists'].apply(lambda x: x[i])


查看完整回答
反對 回復 2022-07-26
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

將一系列列表轉換為單獨列的最簡單方法是apply將它們轉換為系列,這會觸發'expand'結果類型:


result = df['col1'].apply(pd.Series)

此時,我們可以將自動編號的列調整為包含原始名稱'col1',例如:


result.columns = [

    'col1_{}'.format(i + 1)

    for i in result.columns]

最后,我們可以將它加入到原來的 DataFrame 中。使用這是第一列這一事實很容易,只需將其連接到原始框架的左側,'col1'在此過程中刪除原始:


result = result.join(df.drop('col1', axis=1))

rename()您甚至可以通過使用更改列名的方法將其全部作為單行來完成:


df['col1'].apply(pd.Series).rename(

    lambda i: 'col1_{}'.format(i + 1),

    axis=1,

).join(df.drop('col1', axis=1))


查看完整回答
反對 回復 2022-07-26
  • 2 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號