[Vaex 1.0.0-beta.6] how to split data from str to list.
2020. 8. 29. 13:48ㆍ분석 Python/Vaex
import vaex
vaex에서는 List로 된 Object를 hdf5로 저장할 수 없어서 구분자 `[SEP]` 를 만들어서 string으로 만들었다.
그리고 다시 그것을 pandas처럼 split을 사용하여 처리하려고 하니 다음과 같은 에러가 발생했다.
data_vaex.feature.str.split("[SEP]")
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
~/anaconda3/lib/python3.6/site-packages/IPython/core/formatters.py in __call__(self, obj)
700 type_pprinters=self.type_printers,
701 deferred_pprinters=self.deferred_printers)
--> 702 printer.pretty(obj)
703 printer.flush()
704 return stream.getvalue()
~/anaconda3/lib/python3.6/site-packages/IPython/lib/pretty.py in pretty(self, obj)
400 if cls is not object \
401 and callable(cls.__dict__.get('__repr__')):
--> 402 return _repr_pprint(obj, self, cycle)
403
404 return _default_pprint(obj, self, cycle)
~/anaconda3/lib/python3.6/site-packages/IPython/lib/pretty.py in _repr_pprint(obj, p, cycle)
695 """A pprint that just redirects to the normal repr function."""
696 # Find newlines and replace them with p.break_()
--> 697 output = repr(obj)
698 for idx,output_line in enumerate(output.splitlines()):
699 if idx:
~/anaconda3/lib/python3.6/site-packages/vaex/expression.py in __repr__(self)
432
433 def __repr__(self):
--> 434 return self._repr_plain_()
435
436 def _repr_plain_(self):
~/anaconda3/lib/python3.6/site-packages/vaex/expression.py in _repr_plain_(self)
463 info = 'Expression = ' + expression + '\n'
464 str_type = str
--> 465 dtype = self.dtype
466 dtype = (str(dtype) if dtype != str_type else 'str')
467 if self.expression in self.ds.get_column_names(hidden=True):
~/anaconda3/lib/python3.6/site-packages/vaex/expression.py in dtype(self)
252 @property
253 def dtype(self):
--> 254 return self.ds.dtype(self.expression)
255
256 @property
~/anaconda3/lib/python3.6/site-packages/vaex/dataframe.py in dtype(self, expression, internal)
2032 except:
2033 data = self.evaluate(expression, 0, 1, filtered=True, internal=True, parallel=False)
-> 2034 dtype = data.dtype
2035 if not internal:
2036 if dtype != str_type:
AttributeError: 'vaex.superstrings.StringListList' object has no attribute 'dtype'
아래 문서에서는 마치 split을 제공하는 것처럼 되어 있었는데..ㅠ
https://vaex.readthedocs.io/en/latest/api.html?highlight=string#string-operations
그래서 처음에는 pandas_to_series로 변환해서 처리를 했다가, 그러면 별로 안 좋은 방법인 것 같아 찾아보니 아래와 같은 apply를 쓰는 방법이 있었다.
기존 방법
def split_by_sep(x:pd.Series) :
return x.apply(lambda x x.split("[SEP]"))
data_vaex[LIST_TYPE_COL].to_pandas_df().apply(lambda x : split_by_sep(x),axis=1)
https://github.com/vaexio/vaex/issues/442
새로 찾은 방법
def split_by_sep(x:pd.Series) :
return x.split("[SEP]")
data_vaex.apply(split_by_sep, [data_vaex.feature])
vaex로 바로 변환된 것을 알 수 있다!
아직 vaex가 아쉬운 부분이 많지만, 빅데이터 처리 시 좋은 점이 아주 많기 때문에 계속 업데이트가 되고 있기 때문에, 연습해둘 가치가 있는 패키지라고 생각된다.
728x90
'분석 Python > Vaex' 카테고리의 다른 글
[Vaex] Join on Multiple Columns (0) | 2020.09.02 |
---|---|
[Vaex] big data (.csv) covert to hdf5 (0) | 2020.09.02 |
[Vaex 1.0.0-beta.6] Groupby 사용해보기 (0) | 2020.08.29 |
[Vaex 1.0.0-beta.6] Virtual Column 알아보기 (0) | 2020.08.29 |
[Vaex 1.0.0-beta.6] Virtual column 생성 후 pandas로 변경하기 (0) | 2020.08.29 |