90955


エクエルから読み込んだ値が半角なのか全角なのかを一つ一つ判定したいと考えています。  
いくつか試してみましたが、思うようにいかないので教えていただきたいです。  
以下の方法以外に良い方法があればよろしくお願いします。  
①

[code]

    import pandas as pd
    import unicodedata as ud
    df=pd.read_excel("check.xlsx",sheet_name="Sheet1")
    for df1 in df["チェック"]:
     if ud.east_asian_width(str(df1)):
        print("半角")
     else:
        print("全角")
    
[/code]

エラー内容

[code]

    if ud.east_asian_width(str(df1)):
    TypeError: east_asian_width() argument must be a unicode character, not str
    
[/code]

②

[code]

    import pandas as pd
    import unicodedata as ud
    df=pd.read_excel("check.xlsx",sheet_name="Sheet1")
    for df1 in df["チェック"]:
     if ud.east_asian_width(df1):
        print("半角")
     else:
        print("全角")
    
[/code]

エラー内容

[code]

     if ud.east_asian_width(df1):
    TypeError: east_asian_width() argument must be a unicode character, not float
    
[/code]

Excelデータ  
[![画像の説明をここに入力](https://i.stack.imgur.com/ANOY3.png)](https://i.stack.imgur.com/ANOY3.png)


CC BY-SA 4.0
2022-09-06T02:49:06.420
90953
2022-09-06T03:23:24.933
54274
question
python
半角数字・文字のチェック方法


`east_asian_width`は文字列全体を判定するのではなく、キャラクタを1文字渡して判定します。  
また戻り値は`None`にならず、渡された1文字が半角英数字ならば`Na`が、半角カナならば`H`が返ります。

[python文字列｜半角/全角混じりの文字数カウントにはeast_asian_width()](https://anchoco.me/python-
len-fullwidth-halfwidth/)

そのため判定用のサンプルコードは下記のようになります。

[code]

    import pandas as pd
    import unicodedata as ud
    df=pd.read_excel("check.xlsx",sheet_name="Sheet1")
    for df1 in df["チェック"]:
        widthes = set([ud.east_asian_width(c) for c in str(df1)])
        if len(widthes) > 1:
            print("混合")
        else:
            w = widthes.pop()
            if w == 'Na':
                print("半角英数")
            elif w == 'H':
                print("半角カナ")
            else:
                print("全角")
    
[/code]


CC BY-SA 4.0
2022-09-06T03:23:24.933
90955
2022-09-06T03:23:24.933
9820
90953
answer