

Python3で `pandas.DataFrame.fillna` を使ってExcelファイルの行と列を入れ替えた後に `Replace`
を使ってデータを置換したいです。  
実現したい内容が上手くいかないので質問させて頂きます。  
ご指導をお願いできますでしょうか。

**Excel Data**

No | 国 | 都市 | ディズニーランド有/無  
---|---|---|---  
1 | アメリカ | カリフォルニア | 有  
|  | フロリダ | 有  
2 | フランス | パリ | 有  
3 | 日本 | 東京 | 有  
|  | 沖縄 |  
|  | 京都 | 無  
4  | ブラジル | サンパウロ | 無  
  
**実現したいExcelのデータ**

**無しと空白の場合、都市の列を "0"へ置換したいです。**

No | 国 | 都市 | ディズニーランド有/無  
---|---|---|---  
1 | アメリカ | カリフォルニア | 有  
1 | アメリカ | フロリダ | 有  
2 | フランス | パリ | 有  
3 | 日本 | 東京 | 有  
3 | 日本 | 0 |  
3 | 日本 | 0 | 無  
4 | ブラジル | 0 | 無  
  
下記のコードで0へ置換できますが、毎回データ固定ではないでので、  
不定的に変わる時にどのように置換すればよろしいでしょうか。

[code]

    df= df.replace({' ': '0'}, regex=True)
    df= df.replace({'京都': '0'}, regex=True)
    df= df.replace({'サンパウロ': '0'}, regex=True)
    
[/code]

code

[code]

    import pandas as pd
    from openpyxl import Workbook, load_workbook
    from openpyxl.utils.dataframe import dataframe_to_rows
    
    pd.set_option('display.unicode.east_asian_width', True)
    
    wb = load_workbook("test.xlsx")
    ws = wb['Sheet1']
    
    # convert to pandas dataframe
    data = ws.values
    cols = next(data)
    df = pd.DataFrame(data, columns=cols)
    
    # fill in the forward
    df[['No', '国']] = df[['No', '国']].fillna(method='ffill')
    df.No = df.No.astype(int)
    
    # select data
    #dfx = df[df['ディズニーランド有/無'] == '無']
    # dfx_2 =dfx.replace({dfx: '0'}, regex=True)
    
    df= df.replace({' ': '0'}, regex=True)
    df= df.replace({'京都': '0'}, regex=True)
    df= df.replace({'サンパウロ': '0'}, regex=True)
    print(df.to_markdown(index=False))
    
    # save to a new sheet
    wb = Workbook()
    ws = wb.active
    
    for r in dataframe_to_rows(df, index=False, header=True):
      ws.append(r)
    
    wb.save('testchange.xlsx')
    
[/code]


CC BY-SA 4.0
2021-08-26T03:54:16.660
81055
2021-08-26T07:39:51.160
2021-08-26T06:52:33.143
3060
18859
question
python python3 pandas
Python DataFrameを使ってデータを置換する方法について


isinを使って、希望通りの条件抽出できました。  
データフレームから条件に合致するデータを抽出出来るようになります。

**変更前**

[code]

    df= df.replace({' ': '0'}, regex=True)
    df= df.replace({'京都': '0'}, regex=True)
    df= df.replace({'サンパウロ': '0'}, regex=True)
    
[/code]

**変更後**

[code]

    df.loc[df['ディズニーランド有/無'].isin(('無', '', None)), '都市'] = 0
    
[/code]

参考ページ  
[pandasの「isin」の使い方を解説](https://note.nkmk.me/python-pandas-query/)


CC BY-SA 4.0
2021-08-26T07:39:51.160
81060
2021-08-26T07:39:51.160
18859
81055
answer