将逗号分隔的单元格内容转换为同一列中的多个单元格

时间:2018-09-17 10:39:00

标签: excel python-3.x pandas

我有一个具有以下数据类型的excel文件。

Pink_Floyd,Beatles,Pearl_Jam,Porcupine_Tree 5.56

数据由相同类型的行组成。数值位于下一个单元格中。 我想将其转换为以下格式-

Pink_Floyd 5.56
Beatles    5.56
Pearl_Jam  5.56
Porcupine_Tree 5.56 

如何做到?

1 个答案:

答案 0 :(得分:1)

使用:

df = pd.DataFrame({'A': ['Pink_Floyd,Beatles,Pearl_Jam,Porcupine_Tree', 'Beatles'], 
                   'B': [5.56, 10.0]})
print (df)
                                             A      B
0  Pink_Floyd,Beatles,Pearl_Jam,Porcupine_Tree   5.56
1                                      Beatles  10.00

s = (df.pop('A').str.split(',', expand=True)
       .stack()
       .reset_index(level=1, drop=True)
       .rename('A'))

df = df.join(s).reset_index(drop=True)[['A','B']]

说明

  1. 通过pop提取列A
  2. 然后从splitDataFrame
  3. stack重塑
  4. 然后reset_index删除第一级MultiIndex
  5. 通过rename更改列名称
  6. join保留为原始格式,并在必要时将列的顺序更改list

或通过构造函数创建新的DataFrame

from itertools import chain

a = df['A'].str.split(',')

df = pd.DataFrame({
    'A' : list(chain.from_iterable(a.values.tolist())), 
    'B' : df['B'].values.repeat(a.str.len())
})

print (df)
                A      B
0      Pink_Floyd   5.56
1         Beatles   5.56
2       Pearl_Jam   5.56
3  Porcupine_Tree   5.56
4         Beatles  10.00