蟒蛇/熊猫;拆分元素

时间:2021-07-07 09:45:28

标签: python dataframe split

我有一个 Pandas DataFrame,其中有一列如下:

<头>
索引 ID Value_1
1 1 123
2 2 543;735;926
3 3 64;235
4 4 7643

有没有办法建立这样的列:

<头>
索引 ID Value_2
1 1 123
2 2 543
3 2 735
4 2 926
5 3 64
6 3 235
7 4 7643

先谢谢你!

3 个答案:

答案 0 :(得分:2)

试试str.explode

import pandas as pd

df = pd.DataFrame([[1,'123'], [2, '543;735;926'], [3, '64;235'], [4, '7643']], columns=['ID', 'Value_1'])

df['Value_1'] = df['Value_1'].str.split(';')

df.explode('Value_1')
    ID  Value_1
0   1   123
1   2   543
1   2   735
1   2   926
2   3   64
2   3   235
3   4   7643

答案 1 :(得分:0)

只需在 split;explode

df['Value_1'].str.split(';').explode()

输出:

0     123
1     543
1     735
1     926
2      64
2     235
3    7643
Name: Value_1, dtype: object

答案 2 :(得分:0)

我假设您的输入列数据都是字符串。 在这种情况下,您可以拆分每个字符串并链接结果迭代器

import itertools

def split_column(column, sep: str = ";"):
  return itertools.chain.from_iterable(
    map(lambda s: s.split(sep), column)
  )

这应该复制您的示例请求

import pandas as pd
import itertools

ds = pd.DataFrame(data={
  "Value_1": [
    "123",
    "543;735;926",
    "64;235",
    "7643"
  ]
})

def split_column(column, sep: str = ";"):
  return itertools.chain.from_iterable(
    map(lambda s: s.split(sep), column)
  )

ds2 = pd.DataFrame(data={"Value_2": split_column(ds["Value_1"])})

如果我打印 ds 我得到

       Value_1
0          123
1  543;735;926
2       64;235
3         7643

如果我打印 ds2 我得到

  Value_2
0     123
1     543
2     735
3     926
4      64
5     235
6    7643