我有一个具有以下数据类型的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
如何做到?
答案 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']]
说明:
pop
提取列A
split
到DataFrame
stack
重塑reset_index
删除第一级MultiIndex
rename
更改列名称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