我的数据框如下所示:
+-------+-----------------------------------------+
| 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 中完成此操作?
最佳答案
您可以使用 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={'旧列名称':'所需列名称'})
关于python - 如何将单元格中的值转换为 Pandas 中的新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51288942/