数据框列分别包含许多换行符 (\n) 及其值如何将其分隔为新列和值

问题描述

在使用 Camelot 读取 PDF 表格时,一些列被连接在一起,它们的值也如下所示

Date      | Facture-ref\nfactureid|     Description\items|  Payé\nescompte  |Déboursé\nPaiement\net
--------------------------------------------------------------------
12/12/2019| 45333\n34343          |     7899\nscrewio    |  89\n0.00        |3443.12\n231232.00\n456
12/12/2019| 453343\n3434          |     7845\nscrewio    |  78\n0.00        |34.12\n232.00\455
@H_502_4@

我的输出应该如下图

Date        |facture |      Facture |      factureid | Description| items  |   Payé |  Escompte|  Déboursé |   Paiement |    net
-----------------------------------------------------
 12/12/2017 |  45333 |       34343  |     #al: 7899  |    screwio |    89  |   0.00 |   3443.12|   231232.00 |   456|
 12/12/2017 | 453343 |         3434 |    #rfp: 7845  |    screwio |    78  |   0.00 |    34.12 |     232.00  |   455  |
@H_502_4@

我希望基于换行符分隔列和值。

您使用以下 df 进行实验创建

data = [['12/12/2019','45333\n34343','7899\nscrewio','89\n0.00','3443.12\n231232.00\n456'],['12/12/2019'、'232\n3434'、'7845\n坚果'、'78\n0.00'、'34.12\n232.00\455'] ]

df33 = pd.DataFrame(data,columns = ['Date','Facture-ref\nfactureid','Description\nitems','Payé\nescompte','Déboursé\nPaiement\nnet'])

解决方法

我确信有一种更优雅的方法可以做到这一点,但这应该可行。

编辑:有和没有下降。如果我误解了您,请随时发布示例数据集。 样本数据:

>>> data = {'col_1':['a']*5,'col_2\ncol_3':['b\nc']*5,'col_4':['d']*5}
>>> df = pd.DataFrame(data)
>>> df
  col_1 col_2\ncol_3 col_4
0     a         b\nc     d
1     a         b\nc     d
2     a         b\nc     d
3     a         b\nc     d
4     a         b\nc     d

带下降:

>>> for col in [i for i in df.columns if '\n' in i]:
    df[col.split('\n')]=df[col].str.split('\n',expand=True)
    df.drop(columns=col,inplace=True)
>>> df
  col_1 col_4 col_2 col_3
0     a     d     b     c
1     a     d     b     c
2     a     d     b     c
3     a     d     b     c
4     a     d     b     c

没有掉落:

>>> for col in [i for i in df.columns if '\n' in i]:
    df[col.split('\n')]=df[col].str.split('\n',expand=True)
>>> df
  col_1 col_2\ncol_3 col_4 col_2 col_3
0     a         b\nc     d     b     c
1     a         b\nc     d     b     c
2     a         b\nc     d     b     c
3     a         b\nc     d     b     c
4     a         b\nc     d     b     c