pandas 如何基于字符将数据拆分为2行?

yyyllmsg  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(186)

我有一个数据框:

col1  col2   col3  col4
row1  'a'    'b'    'c'   'd\ne'
row2 'f\ng' 'h\ni' 'j\nk' 'l\nm'
row3 'n'    'o'    'p'     'q'
row4 'r'    's'    't'     'u'

我想基于字符/将行数据拆分为2个单独的行,当给定行中字符的字符计数超过4时。
在这种情况下,根据以下条件拆分数据:“\n”,并且此字符的行计数〉3时。
输出:

col1  col2   col3  col4
    row1  'a'     'b'    'c'   'd\ne'
    row2  'f'     'h'    'j'    'l'
    row3  'g'     'i'    'k'    'm'
    row4  'n'     'o'    'p'    'q'
    row5  'r'     's'    't'    'u'

我该怎么做?
用于标识包含“\n”字符的行的代码。

for row in range(df.shape[0]):
    if '\n' in df.iloc[row,0]:
        if (''.join(df.iloc[row]).count('\n'))>3:
            print(row)

这可能需要一点改进,也许在一行中完成所有这些操作?
我是否可以使用vstack并基于“\n”拆分 Dataframe ?

e4yzc0pl

e4yzc0pl1#

假设要在所有值都包含\n时拆分行:

# identify \n
m = df.apply(lambda s: s.str.contains('\n'))

# split rows having \n in all columns
df.update(df[m.all(axis=1)].apply(lambda x: x.str.split('\n')))

# create new row(s)
df = df.explode(list(df), ignore_index=True)

# update the index
df.index = 'row' + (df.index+1).astype(str)

print(df)

输出:

col1 col2 col3  col4
row1    a    b    c  d\ne
row2    f    h    j     l
row3    g    i    k     m
row4    n    o    p     q
row5    r    s    t     u

相关问题