【问题标题】:How to transform values from a cell into new columns in Pandas?如何将单元格中的值转换为 Pandas 中的新列?
【发布时间】:2018-12-19 16:46:52
【问题描述】:

我的数据框如下所示:

+-------+-----------------------------------------+
| Image | Bounding Boxes                          |
+-------+-----------------------------------------+
| a.jpg | xyz 0.1 0.2 0.3 0.4                     |
| b.jpg | xyz 0.1 0.2 0.3 0.4 ijk 0.4 0.3 0.2 0.1 |
+-------+-----------------------------------------+

这些边界框的值总是以五个一组的形式出现,其中值的意思是(按顺序)

  • 边界框表示的标签的ID
  • 边界框的 X 坐标(以图像宽度的百分比表示)
  • 边界框的 Y 坐标(以图像高度的百分比表示)
  • 图片的宽度(占整个图片的百分比)
  • 图片高度(占整个图片的百分比)

由于每行最多只有 5 个这样的对(并且至少为零),我想将数据框转换为如下所示:

+-------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+
| Image | L1  | x1  | y1  | w1  | h1  | L2  | x2  | y2  | w2  | h2  | ... | h5 |
+-------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+
| a.jpg | xyz | 0.1 | 0.2 | 0.3 | 0.4 |     |     |     |     |     |     |    |
| b.jpg | xyz | 0.1 | 0.2 | 0.3 | 0.4 | ijk | 0.4 | 0.3 | 0.2 | 0.1 | ... |    |
+-------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+

换句话说,以前在一列中的每个以空格分隔的值,我希望它们分成一个新列。

问题

如何在 Pandas 中做到这一点?

【问题讨论】:

    标签: python pandas dataframe data-science


    【解决方案1】:

    您可以只使用str.split(' ', expand=True) 分割空间,然后加入Image 列:

    new_df = df[['Image']].join(df['Bounding Boxes'].str.split(' ', expand=True))
    
    >>> new_df
       Image    0    1    2    3    4     5     6     7     8     9
    0  a.jpg  xyz  0.1  0.2  0.3  0.4  None  None  None  None  None
    1  b.jpg  xyz  0.1  0.2  0.3  0.4   ijk   0.4   0.3   0.2   0.1
    

    之后,您可以使用new_df.columns = ['my', 'list', 'of', 'column', 'names']new_df.rename(columns={'old column name':'desired column name'}) 重命名您认为合适的列

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 2021-11-08
      • 1970-01-01
      • 2022-01-01
      • 2020-12-08
      • 2018-03-05
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      相关资源
      最近更新 更多