python - 将不同的条目拆分成单独的行,只允许某些组合

标签 python csv pandas

我在网上搜索了一个答案,但是,虽然有人问过类似的问题,但它们并不相同,我无法使用它们。

我有一个 pandas 数据框,其中几列文本字符串有时包含逗号分隔值。我想拆分包含其中三个逗号分隔值的每个 CSV 字段,为每个条目创建一个新行,但以这种方式并行(使用 A、C 和 D,不使用 E):

In [10]: before 
Out[10]: 
    A        B    C            D         E
0  a1,a2,a3  1    c1, c2, c3   d1,d2,d3  e1,e2,e3
1  a4        2    c4           d4        e4

In [11]: after
Out[11]: 
      A    B     C    D     E
0    a1    1    c1   d1    e1,e2,e3
1    a2    1    c2   d2    e1,e2,e3
2    a3    1    c3   d3    e1,e2,e3
3    a4    2    c4   d4    e4

问题是,它应该适用于不同的表,并且所有这些表可能有不同的列(但总是这三个,A、C 和 D,具有相同的名称)。此外,其他列在某些未拆分的单元格中可能具有逗号分隔值,就像 E 中发生的那样。

编辑:这三列在同一行中总是有相同数量的逗号分隔值,但它可以在行之间变化(1 个值、2 个逗号分隔值、3 个逗号分隔值...)。

很抱歉,我想提供一些代码,但我无法提供任何远程有用的东西。

有人可以帮助我吗?我真的很感激任何帮助! :)

最佳答案

如果您知道三列始终具有相同数量的逗号分隔值,您可以这样做:

>>> df
          A  B         C         D         E
0  a1,a2,a3  1  c1,c2,c3  d1,d2,d3  e1,e2,e3
1        a4  2        c4        d4        e4

拆分每一列:

>>> for col in ['A', 'C', 'D']:
...     df[col] = df[col].str.split(',')
... 
>>> df
              A  B             C             D         E
0  [a1, a2, a3]  1  [c1, c2, c3]  [d1, d2, d3]  e1,e2,e3
1          [a4]  2          [c4]          [d4]        e4

定义索引器:

>>> i = df['A'].map(len)
>>> j = np.repeat(np.arange(len(df)), i)
>>> k = np.concatenate(list(map(np.arange, i)))

展开框架:

>>> df = df.iloc[j]
>>> df
              A  B             C             D         E
0  [a1, a2, a3]  1  [c1, c2, c3]  [d1, d2, d3]  e1,e2,e3
0  [a1, a2, a3]  1  [c1, c2, c3]  [d1, d2, d3]  e1,e2,e3
0  [a1, a2, a3]  1  [c1, c2, c3]  [d1, d2, d3]  e1,e2,e3
1          [a4]  2          [c4]          [d4]        e4

从每个列表中取一个:

>>> for col in ['A', 'C', 'D']:
...     df[col] = list(map(lambda xs, i: xs[i], df[col], k))
... 
>>> df
    A  B   C   D         E
0  a1  1  c1  d1  e1,e2,e3
0  a2  1  c2  d2  e1,e2,e3
0  a3  1  c3  d3  e1,e2,e3
1  a4  2  c4  d4        e4

关于python - 将不同的条目拆分成单独的行,只允许某些组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25524916/

相关文章:

python - 如何加速非常慢的 Pandas 应用功能?

python - 在 CSV 文件中写入和读取 float 和字符串 - python

php - 将 CSV 文件转换为 Mysql 数据库 PHP

python - 如何从 csv 中删除一列?

Python ctypes : how to pass row outputs from a C function into a pandas DataFrame?

python - 如何根据不同的列名合并两个数据框

c# - 如何从 url 读取 csv 文件?

python - 如何切割和 reshape /融化表格或 CSV 文件

python - 数据集中的SettingWithCopyWarning

python - Orange Pi 接线Pi