python - 如何将单元格中的值转换为 Pandas 中的新列?

标签 python pandas dataframe data-science

我的数据框如下所示:

+-------+-----------------------------------------+
| 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/

相关文章:

python - 将嵌套列表和字典转换为数据框?

python - 具有不等组的 Pandas 条形图

python - Pandas 在数据框中丢弃单词

python - 如何提取具有相同值的段?

python - 如何使用 scipy 的 affine_transform 对彩色图像进行任意仿射变换?

python - Python 中根据字符长度解析/打印; CodeEval 上只有 98%

Python 列表抽象

python - 按列表中的值过滤 pandas DataFrame

python - Pandas 数据帧聚合

python - Pandas :用列最大值替换列中的所有值