亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

行函數上的 Pandas 列字符串方法

行函數上的 Pandas 列字符串方法

Cats萌萌 2021-12-16 16:03:39
我正在嘗試使用字符串方法根據其他三個列的條件計算一個新列。樣本數據:d = pd.DataFrame({'street1': ['1000 foo dr', '1001 bar dr', '1002 foo dr suite101', '1003 bar dr'],               'street2': ['city_a', np.nan, 'suite 101', 'suite 102'],               'city': ['city_a', 'city_b', np.nan, 'city_c']})street1                 street2     city1000 foo dr             city_a      city_a1001 bar dr             NaN         city_b1002 foo dr suite101    suite 101   NaN1003 bar dr             suite 102   city_c理想輸出:Address1000 foo dr1001 bar dr1002 foo dr suite 1011003 bar dr suite 102這里的想法是如果street2匹配city,忽略如果street2匹配的結尾street1,則忽略否則,連接street1和street2我試過的:def address_clean(row):    if not row['street2']:        return row['street1']    if row['street2'] == row['city']:        return row['street1']    elif row['street1'].str.replace(' ', '').find(row['street2'].str.replace(' ', '')) != -1:        return row['street1']    else:        return row['street1'] + row['street2']d.apply(lambda row: address_clean(row), axis=1).head()這個給我一個錯誤:AttributeError: ("'str' object has no attribute 'str'", 'occurred at index 1')似乎row[street1]是一個string而不是一個pd.Series。但是,即使我.str從原來的函數中刪除了這個部分,它變成了:def address_clean(row):    if not row['street2']:        return row['street1']    if row['street2'] == row['city']:        return row['street1']    elif row['street1'].replace(' ', '').find(row['street2'].replace(' ', '')) != -1:        return row['street1']    else:        return row['street1'] + row['street2']d.apply(lambda row: address_clean(row), axis=1).head()該代碼向我拋出以下錯誤:AttributeError: ("'float' object has no attribute 'replace'", 'occurred at index 1')我想知道我錯誤地使用了函數的哪一部分,以及如何解決這個錯誤。
查看完整描述

1 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

在一系列中搜索模式很容易,但我必須使用它apply來查找列是否以另一列的內容結尾。順便說一句,我不得不稍微更改您的數據,因為除非要忽略空格'...suite101','suite 101'否則不會以結尾。所以我使用了:


d = pd.DataFrame({'street1': ['1000 foo dr', '1001 bar dr', '1002 foo dr suite 101', '1003 bar dr'],

                  'street2': ['city_a', np.nan, 'suite 101', 'suite 102'],

                  'city': ['city_a', 'city_b', np.nan, 'city_c']})


print(pd.DataFrame({'Address': np.where(d.street2.str.contains('city', na=True)

               | d.apply(lambda x: x.street1.endswith(str(x.street2)), axis = 1),

               d.street1,

               d.street1.str.cat(d.street2, sep=' '))}))

按預期給出:


                 Address

0            1000 foo dr

1            1001 bar dr

2  1002 foo dr suite 101

3  1003 bar dr suite 102


查看完整回答
反對 回復 2021-12-16
  • 1 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號