0

18 列と 15K 行の df があります。

df.info() は最初の列に与えます:

'''

0   Behandelcode                17451 non-null  object

''' 列 'Behandelcode' のすべての値を整数に変換すると、一部の文字列の末尾に文字が含まれているため失敗します。例: '''

(405, '33971'),
 (406, '38154'),
 (407, '033620A'),
 (408, '33971'),

''' 文字列の最後に文字がある場合、文字列の長さは 7 です。

私はあまりにも長い間努力してきました。だからもう一度あなたの助けが必要です。

問題は、列 df2['Behandelcode'] を反復処理してすべての値を保持するにはどうすればよいかということですが、(たとえば) インデックス行 407 の 0336620A の A だけが削除されます。0336620 はそのままです。そして、これは文字で終わるすべての値に対してです。

私はこれを試しましたが、うまくいきませんでした....

'''

for i, value in enumerate(df2['Behandelcode']):
y = len(value)
if y == 7:
    value[:-1]
else:
    value = value

''' おそらく、len を使用するよりも安全でクリーンな python メソッドがあるでしょう。今のところ、まず最初に、この列をクリーニングして、type(int32) に設定できるようにします。あなたが私を助けることができれば、私は非常に感謝しています. こんにちはヤン

4

4 に答える 4

0

ありがとうございます!悲しいことに、それはうまくいかないようです。

たとえば、df2.iloc['Behandelcode'] は '035774A' を返します。

多分私のDFの一部のビューが役立ちますか?

ここに画像の説明を入力

私の投稿への朝の編集:私を助けようとしてくれてありがとう。

おそらくこれが役立つでしょう: このコードは、コードの下のリストの一部のように見えるリストを提供します。len(zeven) を実行すると、値が 1 になります。私にとっては、長さ 7 の df['Behandelcode'] 値がすべてこのリストに含まれているため、これは奇妙です。

'''

for x in df2['Behandelcode']:
    zeven = []
    if len(x) == 7:
        print(x)
        zeven.append(x)
    else:
        x=x

''' これにより、次の結果が得られます (合計リスト zeven の一部):

035774A
035774A
035774A
033620D
035774A
033620D
035774A
033620A
035774A

このコードも試しました。エラーなしで実行されます(df2> df3のコピーが作成されます)が、私の列には影響しません....

'''

for x in df3['Behandelcode']:
    zeven = []
    if len(x) == 7:
        df3['Behandelcode'].apply(lambda x: x[:-1])
        zeven.append(x)
    else:
        x=x

'''

解決策は単純なはずですが、まだ理解できません。これらの文字列の末尾にあるすべての文字を削除して、後で整数に変換できるようにする方法です。再度、感謝します!

于 2020-08-08T18:31:12.793 に答える
0

Sgar28 ありがとうございます。質問は次のとおりです。これを df に配置するにはどうすればよいですか?

ラムダ関数の前 (出力の最後の行):

''' df['Behandelcode']

'''

17446      31802
17447      31802
17448      31802
17449      31802
17450    031714A

ラムダを適用します: '''

df['Behandelcode'].str.replace(r'(?P<match>\d{6}).*', lambda x: x.group('match'))

''' は以下を与えます:

17446     31802
17447     31802
17448     31802
17449     31802
17450    031714

しかし、次のように私の df をチェックしています: '''

df.loc[17450]['Behandelcode']

''' は以下を与えます:

'031714A'

解決策は私の最後の質問に簡単です...... '''

df['Behandelcode'] = df['Behandelcode'].str.replace(r'(?P<match>\d{6}).*', lambda x: x.group('match'))

'''

再度、感謝します!!!

于 2020-08-09T09:07:50.823 に答える