Pandas笔记:explode

  • Post author:
  • Post category:其他




目标:把dataframe某个string格式的N个逗号分隔值,拆分成N行

import pandas as pd

df = pd.DataFrame({'a': ['a', 'b'],
                     'b': ['1, 2, 3,', '4, 5, 6']})



做法一:仅使用

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()

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

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