フォーマットを間違えたり、質問を壊したりした場合は、事前に謝罪してください...
私はパンダ(およびpython)が初めてで、学んだことを自分のデータセットに適用しようとゆっくりと取り組んでいます。
多くのセルが null (または同等) である助成金データのまばらなデータフレームがあり、その多くは正規化によって取り除くことができるはずです。さらに、プロジェクト番号には、個別に提供された他のフィールド (年、助成者、研究活動など) を検証するために使用できる情報がそれぞれに含まれています。
プロジェクト番号は次のようになります。
0 None,
1 None,
2 3C06RR018774,
3 3C06RR018774,
4 1C06RR018796,
5 1C06RR018796,
6 3C06RR018863,
7 3C06RR018863,
8 1C06RR020099,
9 1C06RR020099,
10 1C06RR020117,
そして、私が作成した正規表現は次のようになります。
reobj = re.compile(r"""
(?P<type>[0-9]+)
(?P<act>[A-Z]+[0-9]+)
(?P<ic>[A-Z]{2})
(?P<serial>[0-9]{1,6})""",
flags=re.X)
これは次の理由でうまくいくと確信しています:
m = core.str.match(reobj)
与えます:
0 None
1 None
2 (3, C06, RR, 018774)
3 (3, C06, RR, 018774)
4 (1, C06, RR, 018796)
5 (1, C06, RR, 018796)
6 (3, C06, RR, 018863)
7 (3, C06, RR, 018863)
8 (1, C06, RR, 020099)
9 (1, C06, RR, 020099)
10 (1, C06, RR, 020117)
ただし、グループ m.groups() を取得することもできません。
AttributeError: 'Series' object has no attribute 'groups'
解析されたビット m.str.get(1) を掘り出すこともできません: m.str[0] でも同じエラーが発生します
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-44-2a7675586aff> in <module>()
----> 1 m.str.get(1)
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/strings.pyc in get(self, i)
668 @copy(str_get)
669 def get(self, i):
--> 670 result = str_get(self.series, i)
671 return self._wrap_result(result)
672
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/strings.pyc in str_get(arr, i)
551 """
552 f = lambda x: x[i]
--> 553 return _na_map(f, arr)
554
555
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/strings.pyc in _na_map(f, arr, na_result)
87 def _na_map(f, arr, na_result=np.nan):
88 # should really _check_ for NA
---> 89 return _map(f, arr, na_mask=True, na_value=na_result)
90
91
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/strings.pyc in _map(f, arr, na_mask, na_value)
96 mask = isnull(arr)
97 try:
---> 98 result = lib.map_infer_mask(arr, f, mask.view(np.uint8))
99 except (TypeError, AttributeError):
100 def g(x):
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/lib.so in pandas.lib.map_infer_mask (pandas/lib.c:39584)()
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/strings.pyc in <lambda>(x)
550 items : array
551 """
--> 552 f = lambda x: x[i]
553 return _na_map(f, arr)
554
IndexError: list index out of range
ただし、 m.str[:1] は掘り出します:
0 None
1 None
2 (3)
3 (3)
4 (1)
5 (1)
6 (3)
7 (3)
8 (1)
9 (1)
10 (1)
私の主な誤解は、一連のコンパイルされた一致オブジェクトの反復にあると思いますが、結局のところ、各グループを同じ行内の別のフィールドと比較して、データセットを内部的に検証できるようにしたいと考えています。
m.group('ic') == data['IC']
理想的には、キャプチャされたすべてのグループを一度に配列のような方法で行間で比較できます...
任意のガイダンス、または正しい方向への健全な押し込みでさえ、大歓迎です...