Python 拆分列中的值并创建新cols是一个小问题

Python 拆分列中的值并创建新cols是一个小问题,python,pandas,Python,Pandas,我有一份调查数据,其中一列如下: Evaluations_Col E: 3, D: 3, C: 3, S: 3, E: 3, X, K: 3 E: 1, D: 1, C: 1, S: 1, E: 1, X, K: 1 E: 2, D: 2, C: 2, S: 2, E: 2, X, K: 2 E: 5, D: 5, C: 5, S: 5, E: 5, X, K: 5 E: 3, D: 1, C: 1, S: 1, E: 1, X, K: 1 注意:我需要忽略列中的X值 我想提取每个评

我有一份调查数据,其中一列如下:

Evaluations_Col

E: 3, D: 3, C: 3, S: 3, E: 3, X, K: 3   
E: 1, D: 1, C: 1, S: 1, E: 1, X, K: 1
E: 2, D: 2, C: 2, S: 2, E: 2, X, K: 2 
E: 5, D: 5, C: 5, S: 5, E: 5, X, K: 5
E: 3, D: 1, C: 1, S: 1, E: 1, X, K: 1
注意:我需要忽略列中的X值

我想提取每个评估,并将它们作为每种评估类型的列分开。最后,预期列将如下所示:

E_col    D_col     C_Col   ...

3          3         3
1          1         1
2          2         2
5          5         5
3          1         1
我可以用逗号把它们分开,得到这样一个列表,
[E:3,D:3,C:3,S:3,E:3,K:3]
如何为每个列创建单独的列并正确地分布相应的值

我可以通过此操作正常完成,但是X值会导致问题。。。我怎样才能排除它

df1 = pd.DataFrame([dict([y.split(':') for y in x.split(',')]) for x in test_col])
df1.head()
错误是

ValueError: dictionary update sequence element #9 has length 1; 2 is required

一种方法是使用
str.extractall

s = df["Value"].str.extractall(r"([A-Z]):\s(\d)").reset_index().groupby("level_0")

print (pd.DataFrame(s[1].agg(list).tolist(), columns=s[0].get_group(0).tolist()))

   E  D  C  S  E  K
0  3  3  3  3  3  3
1  1  1  1  1  1  1
2  2  2  2  2  2  2
3  5  5  5  5  5  5
4  3  1  1  1  1  1

仅使用带“:”分隔符的列表理解和筛选行:

让我们把清单分成几个部分:

  • 行上循环:
    用于测试列中的x
  • 通过用“,”分隔,仅将行(由
    x
    表示)分隔为列:
    用于x中的y。拆分(“,”)
  • 仅当“:”分隔符存在时才将列拆分为键值对:
    y.split(“:”)用于x.split(“,”)***仅当y中的“:”存在时才拆分***(这解决了所描述的问题)
  • 代码:

    输出:

        E   D   C   S   E   K
    0   3   3   3   3   3   3
    1   1   1   1   1   1   1
    2   2   2   2   2   2   2
    3   5   5   5   5   5   5
    4   3   1   1   1   1   1
    

    使用
    str.split
    stack

    df1 = (
        df["Evaluations_Col"]
        .str.split(",", expand=True)
        .stack()
        .str.split(":", expand=True)
        .set_index(0, append=True)
        .dropna()
        .unstack([1, 2])
        .droplevel(1,1)
    )
    
    
        1                    
    0   E   D   C   S   E   K
    0   3   3   3   3   3   3
    1   1   1   1   1   1   1
    2   2   2   2   2   2   2
    3   5   5   5   5   5   5
    4   3   1   1   1   1   1
    
    我得到这个错误-->
    传递值的长度是0,索引意味着2。
    df1 = (
        df["Evaluations_Col"]
        .str.split(",", expand=True)
        .stack()
        .str.split(":", expand=True)
        .set_index(0, append=True)
        .dropna()
        .unstack([1, 2])
        .droplevel(1,1)
    )
    
    
        1                    
    0   E   D   C   S   E   K
    0   3   3   3   3   3   3
    1   1   1   1   1   1   1
    2   2   2   2   2   2   2
    3   5   5   5   5   5   5
    4   3   1   1   1   1   1