簡體   English   中英

如何在 Python 中重塑數據

[英]How to reshape data in Python

我有一個僅包含一行但多列的數據框: 在此處輸入圖片說明

我想將每 5 列放到一個新行中。 這是預期的輸出: 在此處輸入圖片說明

原始數據在列表中,我轉換為數據框。 我不知道通過列表重塑是否更容易,但這里有一個示例列表供您嘗試,原始列表真的很長。 ['review: I stayed around 11 days and enjoyed stay very much.', 'compound: 0.5106, ','neg: 0.0, ','neu: 0.708, ','pos: 0.292, ','review: Plans for weekend stay canceled due to Coronavirus shutdown.','compound: 0.0, ','neg: 0.0, ','neu: 1.0, ','pos: 0.0, ']

將其解析為列表更容易,然后將其轉換為數據幀。

  • 對於每個條目,用 ':' 分割條目並將鍵\\值添加到字典中
  • 將字典轉換為數據框

嘗試這個:

import pandas as pd

lst = ['review: I stayed around 11 days and enjoyed stay very much.', 'compound: 0.5106, ','neg: 0.0, ','neu: 0.708, ','pos: 0.292, ',
       'review: Plans for weekend stay canceled due to Coronavirus shutdown.','compound: 0.0, ','neg: 0.0, ','neu: 1.0, ','pos: 0.0, ']

dd = {}

for x in lst:
   sp = x.split(':')
   if sp[0] in dd:
      dd[sp[0]].append(sp[1].replace(',',"").strip())
   else:
      dd[sp[0]] = [sp[1].replace(',',"").strip()]
      
print(dd)
print(pd.DataFrame(dd).to_string(index=False))

輸出

                                                       review compound  neg    neu    pos
          I stayed around 11 days and enjoyed stay very much.   0.5106  0.0  0.708  0.292
 Plans for weekend stay canceled due to Coronavirus shutdown.      0.0  0.0    1.0    0.0

定義主():

data_new = ['review: I stayed around 11 days and enjoyed stay very much.', 'compound: 0.5106, ','neg: 0.0, ','neu: 0.708, ','pos: 0.292, ','review: Plans for weekend stay canceled due to Coronavirus shutdown.','compound: 0.0, ','neg: 0.0, ','neu: 1.0, ','pos: 0.0, ']

len_data = len(data_new)

proc_row_mul_of_five = len_data / 5

j = 5

k = 0 

for i in range(0,proc_row_mul_of_five):
    
    print(data_new[k:j])
    
    k = i + 5
    
    j = j + 5

主要的()

您可以嘗試使用字典

lst = ['review: I stayed around 11 days and enjoyed stay very much.', 'compound: 0.5106, ','neg: 0.0, ','neu: 0.708, ','pos: 0.292, ',
       'review: Plans for weekend stay canceled due to Coronavirus shutdown.','compound: 0.0, ','neg: 0.0, ','neu: 1.0, ','pos: 0.0, ']

from collections import defaultdict
import pandas as pd

data_dict = defaultdict(list)
for _ in lst:
    header, value = _.split(':')
    data_dict [header].append(value.strip())

pd.DataFrame.from_dict(data_dict)

輸出是在此處輸入圖片說明

您可以使用 numpy 輕松完成此操作

import numpy as np
import pandas as pd
lis = np.array(['review: I stayed around 11 days and enjoyed stay very much.', 'compound: 0.5106, ','neg: 0.0, ','neu: 0.708, ','pos: 0.292, ','review: Plans for weekend stay canceled due to Coronavirus shutdown.','compound: 0.0, ','neg: 0.0, ','neu: 1.0, ','pos: 0.0, '])


columns = 5
t = np.char.split(lis,":")
cols,vals = list(zip(*t))
dff = pd.DataFrame(np.split(np.array(vals),len(vals)/columns),
                   columns=cols[:columns]).replace(",","",regex=True)

暫無
暫無

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

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