我正在嘗試創建一個新列(全名),其中包含第一個和familyname,其條件是如果名稱列不為空,則名稱列中的字串應在名稱列中替換,如果名稱列為空,然后應該在名稱列中加入和替換第一個和家庭名
這就是樣本資料的樣子;
name | firstname | familyname
kim humphrey | NaN | NaN
NaN | moustafa | elkashlan
NaN | Joey | Lamp
我試著在下面寫一個python代碼
df_total['Full_Name'] = np.where(df_total[['FAMILYNAME', 'FIRSTNAME']].eq('').any(axis='index'), df_total['NAME'], df_total[['FAMILYNAME', 'FIRSTNAME']].apply(' '.join, axis='index')).all(axis=1)
盡管回傳了以下錯誤;`TypeError Traceback(最近一次呼叫最后)~\AppData\Local\Temp/ipykernel_24080/1087141216.py in <module> 1 df_total['Full_Name'] = np.where(df_total[['FAMILYNAME', 'FIRSTNAME']] .eq('NaN').any(axis='index'), 2 df_total['NAME'], ----> 3 df_total[['FAMILYNAME', 'FIRSTNAME']].apply(' '.join , 軸='索引')).all(軸=1)
~\anaconda3\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, raw, result_type, args, **kwargs) 8738 kwargs=kwargs, 8739 ) -> 8740 回傳 op.apply () 8741 8742 def 應用映射(
~\anaconda3\lib\site-packages\pandas\core\apply.py in apply(self) 686 return self.apply_raw() 687 --> 688 return self.apply_standard() 689 690 def agg(self):
~\anaconda3\lib\site-packages\pandas\core\apply.py in apply_standard(self) 810 811 def apply_standard(self): --> 812 results, res_index = self.apply_series_generator() 813 814 # wrap results
~\anaconda3\lib\site-packages\pandas\core\apply.py in apply_series_generator(self) 826 for i, v in enumerate(series_gen): 827 # 忽略 SettingWithCopy 以防用戶發生變異 --> 828 results[i ] = self.f(v) 829 if isinstance(results[i], ABCSeries): 830 # 如果我們對 v 有看法,我們需要復制一份,因為
型別錯誤:序列項 0:預期的 str 實體,找到浮點數`
下面指出將是我想要的輸出。
-
full_name | name | firstname | familyname
kim humphrey |kim humphrey | NaN | NaN
moustafa elkashlan|NaN | moustafa | elkashlan
Joey Lamp |NaN | Joey | Lamp
uj5u.com熱心網友回復:
下面的代碼將其分為兩個分配步驟:為 name 列不為 null 的新列的索引提供值,另一個為它們為 null 的地方提供值。
mask = df_total['name'].notnull()
df_total.loc[mask, 'full_name'] = df_total.loc[mask, 'name']
df_total.loc[~mask, 'full_name'] = df_total[~mask, 'firstname'].astype(str) " " df_total[~mask, 'lastname'].astype(str)
您的方法是合理的,但問題是.eq(''). NaN不等于空字串,它是浮點值而不是字串值,因此您收到錯誤。.isnull()可能是您正在尋找的條件:
df_total['full_name'] = np.where(
df_total[['firstname','familyname']].isnull().any(axis=1),
df_total['name'],
df_total[['firstname', 'familyname']].apply(" ".join, axis=1)
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449889.html
下一篇:掩碼插值回傳常量值
