0

パンダで正規表現を使用して、列の値を置き換えて、質問の正解をマークしたいと考えています。この列の値は '1943' (正しいもの) で、それ以外の年は正しくありません。

私が今持っているコードは次のとおりです。

incorrect_dict= {'Q1':{'^(?!1943$).*': 0}}
df = df.replace(incorrect_dict, regex=True)

パンダの値を置き換えません。

正規表現自体は、次を使用すると機能するため、問題ないようです。

string ="1933"
regex = re.compile("^(?!1943$).*")
regex.findall(string)

私は得る:

[u'1933']

文字列 = '1943' の場合、「一致が見つかりませんでした:」と表示されるので、正規表現は問題ないと思います。しかし、 if を df.replace で使用すると、値は置き換えられません。

提案をありがとう

4

1 に答える 1

3

年が整数として解析されたと思われます。それがどのように失敗するかを見てください:

In [17]: df = DataFrame({'Q1': [1933, 1943]})

In [18]: df.replace(incorrect_dict, regex=True)
Out[18]: 
     Q1
0  1933
1  1943

しかし、年を文字列に変換すると、期待どおりに機能します。

In [19]: df['Q1'] = df['Q1'].map(str)

In [20]: df.replace(incorrect_dict, regex=True)
Out[20]: 
     Q1
0     0
1  1943

ちなみに、応答を文字列として扱い、正規表現を使用することが正しい方法であるとは確信していません。年を整数として評価してみませんdf['Q1'] == 1943か?結果は、正しい/正しくないことを意味する True/False になります。私にはもっと便利なようです。

于 2013-10-15T14:53:47.670 に答える