簡體   English   中英

滿足條件時更新或替換df中的值

[英]Update or replace value in df when conditions are met

我有一個城市名稱列表和一個帶有城市,州和郵政編碼列的df。 缺少一些郵政編碼。 如果缺少郵政編碼,我想使用基於城市的通用郵政編碼。 例如,城市為聖何塞,因此郵政編碼應為通用的“ SJ_zipcode”。

pattern_city = '|'.join(cities) #works

foundit = ( (df['cty_nm'].str.contains(pattern_city, flags=re.IGNORECASE)) & (df['zip_cd']==0) & (df['st_cd'].str.match('CA') ) ) #works--is this foundit a df?

df['zip_cd'] = foundit.replace( 'SJ_zipcode' ) #nope, error

錯誤:“ pad_1d [布爾]的無效dtype”

where實現

df['zip_cd'].where( (df['cty_nm'].str.contains(pattern_city, flags=re.IGNORECASE)) & (df['zip_cd']==0) & (df['st_cd'].str.match('CA') ), "SJ_Zipcode", inplace = True) #nope, empty set; all set to nan?

loc實現

df['zip_cd'].loc[ (df['cty_nm'].str.contains(pattern_city, flags=re.IGNORECASE)) & (df['zip_cd']==0) & (df['st_cd'].str.match('CA') ) ] = "SJ_Zipcode"

某些無效的解決方案

另一個“想要”; 我想用值更新一個數據框,我不想創建一個新的數據框。

嘗試這個:

df = pd.DataFrame(data)
df

    city         state        zip
0   Burbank      California   44325
1   Anaheim      California   nan
2   El Cerrito   California   57643
3   Los Angeles  California   56734
4   san Fancisco California   32819

def generate_placeholder_zip(row):
    if pd.isnull(row['zip'] ):
        row['zip'] =row['city']+'_ZIPCODE'
    return row   

df.apply(generate_placeholder_zip, axis =1)

    city          state         zip
0   Burbank       California    44325
1   Anaheim       California    Anaheim_ZIPCODE
2   El Cerrito    California    57643
3   Los Angeles   California    56734
4   san Fancisco  California    32819

暫無
暫無

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

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