我有一個包含影像的資料框:
SOME_COL SOME_COL IMAGE_MAIN IMAGE_2 IMAGE_3 IMAGE_4 IMAGE_5 IMAGE_6
* * 0 1 2 3 NaN 5
我想洗掉IMAGE_MAINandIMAGE_[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
uj5u.com熱心網友回復:
您可以首先使用 'IMAGE' 過濾以 'IMAGE' 開頭的列DataFrame.filter,然后逐行應用函式,使用DataFrame.apply該函式洗掉每行的 NaN 并將其轉換為單個串列
df['IMAGES'] = (
df.filter(like='IMAGE')
.apply(lambda row: row.dropna().tolist(), axis=1)
)
請注意,如果一行包含 NaN,則結果串列將包含浮點數,而不是整數。如果要確保這些值是整數,請使用lambda row: row.dropna().astype(int).tolist().
uj5u.com熱心網友回復:
這應該為您解決問題。
過濾 NA 并逐行加入串列。
import pandas as pd
df = pd.DataFrame({
"IMAGE_1": [1,2,None],
"IMAGE_2": [4,None,6],
})
df["IMAGES"] = df["IMAGES"] = (
df
.filter(regex=r"IMAGE_\d")
.apply(lambda r: r.dropna().to_list(), result_type="reduce", axis=1)
)
# IMAGE_1 IMAGE_2 IMAGES
# 0 1.0 4.0 [1.0, 4.0]
# 1 2.0 NaN [2.0]
# 2 NaN 6.0 [6.0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488927.html
上一篇:'beginner_question='我們什么時候給函式添加引數?'
下一篇:基于標準的值
