我有一个包含图像的数据框:
SOME_COL SOME_COL IMAGE_MAIN IMAGE_2 IMAGE_3 IMAGE_4 IMAGE_5 IMAGE_6
* * 0 1 2 3 NaN 5
我想删除 IMAGE_MAIN
和 IMAGE_[2..6]
列并创建一个新的 IMAGES
:
SOME_COL SOME_COL IMAGES
* * [0,1,2,3,5]
如果任何图像是 NaN
,我想跳过该值而不是将 None
或 NaN
添加到列表中。
我试过了,但这显然不是一个好方法:
main_image = data_main['IMAGE_MAIN']
image_2 = data_main['IMAGE_2']
image_3 = data_main['IMAGE_3']
image_4 = data_main['IMAGE_4']
image_5 = data_main['IMAGE_5']
image_6 = data_main['IMAGE_6']
images = [x for x in [IMAGE_MAIN, IMAGE_2, IMAGE_3, IMAGE_4, IMAGE_5, IMAGE_6] if x]
data_main['IMAGES'] = images
最佳答案
您可以先使用 DataFrame.filter
过滤以“IMAGE”开头的列,然后使用 DataFrame.apply
按行应用函数它丢弃每行的 NaN 并将其转换为单个列表
df['IMAGES'] = (
df.filter(like='IMAGE')
.apply(lambda row: row.dropna().tolist(), axis=1)
)
请注意,如果一行包含 NaN,则结果列表将包含 float ,而不是整数。如果您想确保值是整数,请使用 lambda row: row.dropna().astype(int).tolist()
。
关于python - Pandas - 如何将多个列组合成一个以列表作为值的新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72592043/