簡體   English   中英

合並 pandas 數據框列時出錯

[英]Error in merging pandas data frame columns

我正在嘗試將同一數據框中的三列合並為一列。

這是我的數據框selected_vals

   label_1                         label_2                   label_3   
0  NaN                              NaN                      NaN
1  ('__label__Religione_e_Magia',)  NaN                      NaN
2  NaN                            ('__label__Storia',)       NaN
3  NaN                            ('__label__Storia',)       NaN
4 ('__label__Religione_e_Magia',)  NaN                       NaN

dataframe 每行只有一個值,因此,在未指定值的 col 中,我有NaN按照此處提出的解決方案,我使用了以下代碼:

selected_vals['selected_vals'] =  selected_vals.loc[:,selected_vals.columns.tolist()[1:]].apply(lambda x: x.dropna().tolist(), 1)

但是,通過這樣做,只有 col label_2中的值在 col selected_vals

這里的輸出

 label_1                         label_2                   label_3  selected_vals   
0  NaN                              NaN                      NaN      []
1  ('__label__Religione_e_Magia',)  NaN                      NaN      []
2  NaN                            ('__label__Storia',)       NaN      ('__label__Storia',)
3  NaN                            ('__label__Storia',)       NaN      ('__label__Storia',)
4 ('__label__Religione_e_Magia',)  NaN

根據需要 output 我希望將所有值存儲在同一個列中

   selected_vals                              
0  NaN                              
1  ('__label__Religione_e_Magia',)  
2  ('__label__Storia',)                                   
3  ('__label__Storia',)                            
4 ('__label__Religione_e_Magia',)  

關於如何處理這個問題的建議?

謝謝

DataFrame.iloc用於 select 所有列,沒有第一列,然后轉發缺失值,最后 select 最后一列:

#replace NaN strings to np.nan if necessary
selected_vals = selected_vals.replace('NaN', np.nan)

selected_vals['selected_vals'] =  selected_vals.iloc[:,1:].ffill(axis=1).iloc[:, -1]

您可以將 function 應用於每一行並僅保留所需的值(其中列不是 NaN)

selected_vals['selected_vals'] = selected_vals.apply(lambda row: row[row[pd.notnull(row)].index.item()], axis=1)

感謝您的建議。

我認為問題與 dataframe 的類型有關。

我解決了以下問題:

selected_vals = selected_vals.replace(np.nan, '', regex=True)
selected_vals = selected_vals.applymap(str)
df['suggested_label'] = selected_vals["label_1"].astype(str) + selected_vals["label_2"]+ selected_vals["label_3"]

print(df)

不知道它是否正確,但至少它對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM