简体   繁体   English

如何使用 pandas dataframe 操作列表?

[英]How can I manipulate list using pandas dataframe?

I want to create a pandas dataframe. I have the following data list received from a program:我想创建一个 pandas dataframe。我从程序中收到以下数据列表:

rawdatalist = [
        {
            'Project_Name':'App1',
            'Run Id':'25',
            'Complete_Iterations':[('SC1',12.30),('SC2',14.30),('SC3',9.80),('SC4',17.21)]
        },
        {
            'Project_Name':'App1',
            'Run Id':'24',
            'Complete_Iterations':[('SC1',11.30),('SC2',13.30),('SC3',8.80)]
        },
        {
            'Project_Name':'App2',
            'Run Id':'25',
            'Complete_Iterations':[('SC1',11.30),('SC2',13.30),('SC3',8.80),('SC4',16.21),('SC5',14.59)]
        },
        {
            'Project_Name':'App2',
            'Run Id':'24',
            'Complete_Iterations':[('SC2',11.30),('SC3',13.30)]
        }
]

I was able to create the dataframe using following code, but the values were not at the appropriate position.我能够使用以下代码创建 dataframe,但值不在适当的 position。

import numpy as np
import pandas as pd

data = []

for dict in rawdatalist:
    for key in dict['Complete_Iterations']:
        for item in key:
            data.append(item)

num_data = np.reshape(data, (int(len(data)/2),2))
df = pd.DataFrame(num_data)

t = df.groupby(0)[1].apply(list)
out = pd.DataFrame(t.tolist(), index=t.index)
print(out)

Output of above Code以上代码Output

         0      1     2     3
0                            
SC1   12.3   11.3  11.3  None
SC2   14.3   13.3  13.3  11.3
SC3    9.8    8.8   8.8  13.3
SC4  17.21  16.21  None  None
SC5  14.59   None  None  None

Desired Output:所需 Output:

       0        1       2       3
SC1    12.30    11.30   11.30   None
SC2    14.30    13.30   13.30   11.30
SC3     9.80     8.80    8.80   13.30
SC4    17.21    None    16.21   None
SC5    None     None    14.59   None

Here's a fairly simple way to do that:这是一个相当简单的方法:

d = ([dict(d["Complete_Iterations"]) for d in rawdatalist])
pd.DataFrame.from_records(d).transpose()

The output is: output 是:

         0     1      2     3
SC1  12.30  11.3  11.30   NaN
SC2  14.30  13.3  13.30  11.3
SC3   9.80   8.8   8.80  13.3
SC4  17.21   NaN  16.21   NaN
SC5    NaN   NaN  14.59   NaN

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM