2016-05-28 15 views
0

基本的に私は約17000行のcsvをpandasデータフレームにインポートしました。データの品質が非常に悪いため、int64としてインポートされた日付列があります。日付の例としては、11969121320011022013などがあります。だから、私がしたいと思うのは、日付列の最後の4つの数字だけを取り出すことです。Python - 正規表現に基づいた検索と置換

だから私が使用したコードは次のとおりです。

test_str = str(df['Date']) 
flags = re.MULTILINE 
p = r'\d{4}$' 
result = re.findall(p, test_str, flags) 

私はわずか60 17000個の値をprint(result)返されます。私はユニークを評価すると仮定していますが、長い試合の後、私はそれを理解できません。どのように私はこれを回避することができます上の任意のアイデア?

答えて

1

実際に(少なくとも、あなたが与えた例については)仕事をして、あなたの方法のように思える:「

import pandas as pd 
rng = pd.Series([11969, 12132001, 1022013, 1022013]) 
test_str = str(rng) 
flags = re.MULTILINE 
p = r'\d{4}$' 
result = re.findall(p, test_str, flags) 
print(result) 
# ['1969', '2001', '2013', '2013'] # not just unique values 

しかし、文字列にpandasシリーズを変換するこの方法は、それをやっての奇妙な方法であるとdoesnのpandasの固有の構造を利用してください。

あなたはこれをやって検討するかもしれない:df['Date']int64ある場合

df['year_int'] = df['Date'] % 10000 

は、最後の4桁の数字を取得します。またはこの:

df['year_str'] = df['Date'].apply(lambda x: str(x)[-4:]) 

するのではなく、文字列に変換し、最後の4つの文字を取ると思います。

print(df) 
#  Date year_int year_str 
# 0  11969  1969  1969 
# 1 12132001  2001  2001 
# 2 1022013  2013  2013 
# 3 1022013  2013  2013 
+0

ありがとうございます - あなたの代わりの方法が働いています。 ええ私はサンプル/小さなデータセットで私の正規表現の仕組みを知っています..そのちょうど私は17000行のうち60を返すだろう。あなたが言ったように、私はパンダで変なことをしているに違いない。それをもう少し調べてみてください。 – Brrrr

関連する問題