文章目录
目标:把dataframe某个string格式的N个逗号分隔值,拆分成N行
import pandas as pd
df = pd.DataFrame({'a': ['a', 'b'],
'b': ['1, 2, 3,', '4, 5, 6']})
做法一:仅使用
explode()
explode()
df['b'] = df.b.str.split(',')
df.explode('b')
# 结果如下
a b
0 a 1
0 a 2
0 a 3
0 a
1 b 4
1 b 5
1 b 6
做法二:
explode()
搭配
assign()
explode()
assign()
df = pd.DataFrame({'a': ['a', 'b'],
'b': ['1, 2, 3,', '4, 5, 6']})
df.assign(b=df.b.str.split(',')).explode('b') # 等价于 df['b'] = df.b.str.split(',') df.explode('b')
# 结果如下
a b
0 a 1
0 a 2
0 a 3
0 a
1 b 4
1 b 5
1 b 6
df.explode(list(‘AC’))和df.explode(‘A’).explode(‘C’)的结果不同。前者要求AC的list类型值的子值个数一致,并且是配对出现;后者无要求行数是笛卡尔积;
做法三:
explode()
搭配
apply
explode()
apply
df = pd.DataFrame({'a': ['a', 'b'],
'b': ['1, 2, 3,', '4, 5, 6']})
df.apply(lambda x: x.str.split(',').explode())
# 结果如下
a b
0 a 1
0 a 2
0 a 3
0 a
1 b 4
1 b 5
1 b 6