Pandas DataFrame에 메타 정보 / 메타 데이터 추가
Pandas DataFrame에 일부 메타 정보 / 메타 데이터를 추가 할 수 있습니까?
예를 들어, 데이터를 측정하는 데 사용되는 기기의 이름, 담당 기기 등이 있습니다.
한 가지 해결 방법은 해당 정보가 포함 된 열을 만드는 것이지만 모든 행에 단일 정보를 저장하는 것은 낭비 인 것 같습니다!
물론 대부분의 Python 객체와 마찬가지로에 새 속성을 첨부 할 수 있습니다 pandas.DataFrame
.
import pandas as pd
df = pd.DataFrame([])
df.instrument_name = 'Binky'
단, 당신이 DataFrame에 속성을 첨부 할 수있는 반면 것으로, 작업 (예 : 같은 DataFrame에서 수행 groupby
, pivot
, join
또는 loc
새로운 DataFrame을 반환 할 수 있습니다 몇 가지 이름을 위해) 없이 첨부 된 메타 데이터. Pandas에는 아직 DataFrames에 연결된 메타 데이터 를 전파 하는 강력한 방법이 없습니다 .
파일에 메타 데이터 를 보존 할 수 있습니다. 여기 에서 HDF5 파일에 메타 데이터를 저장하는 방법의 예를 찾을 수 있습니다 .
이 문제를 직접 만났습니다. Pandas 0.13부터 DataFrames에는 새 DataFrame을 반환하는 함수를 통해 지속되는 _metadata 속성이 있습니다. 또한 직렬화에서 잘 살아남는 것 같습니다 (json 만 시도했지만 hdf도 포함되어 있다고 생각합니다).
별로. @unutbu에서 언급 한대로 메타 데이터가 포함 된 속성을 DataFrame 클래스에 추가 할 수 있지만 많은 DataFrame 메서드가 새 DataFrame을 반환하므로 메타 데이터가 손실됩니다. 데이터 프레임을 조작해야하는 경우 가장 좋은 방법은 메타 데이터와 DataFrame을 다른 클래스로 래핑하는 것입니다. GitHub에서이 토론을 참조하십시오 : https://github.com/pydata/pandas/issues/2485
현재 메타 데이터를 더 잘 지원하는 MetaDataFrame 객체를 추가하기 위한 공개 풀 요청 이 있습니다.
다른 답변과 의견에서 언급했듯이은 _metadata
공용 API의 일부가 아니므로 프로덕션 환경에서 사용하는 것은 좋은 생각이 아닙니다. 그러나 여전히 연구 프로토 타이핑에 사용하고 작동이 중지되면 교체 할 수 있습니다. 그리고 지금 은 도움이되는 groupby
/ 와 함께 작동 apply
합니다. 이것은 예입니다 (다른 답변에서 찾을 수 없음).
df = pd.DataFrame([1, 2, 2, 3, 3], columns=['val'])
df.my_attribute = "my_value"
df._metadata.append('my_attribute')
df.groupby('val').apply(lambda group: group.my_attribute)
산출:
val
1 my_value
2 my_value
3 my_value
dtype: object
꽤 늦게 왔기 때문에 I / O를 통해 유지하기 위해 메타 데이터가 필요한 경우 이것이 도움이 될 것이라고 생각했습니다. 이 작업을 수행하기 위해 사용해온 h5io 라는 비교적 새로운 패키지 가 있습니다.
몇 가지 일반적인 형식에 대해 HDF5에서 빠른 읽기 / 쓰기를 수행 할 수 있어야합니다. 그중 하나는 데이터 프레임입니다. 따라서 예를 들어 데이터 프레임을 사전에 넣고 메타 데이터를 사전의 필드로 포함 할 수 있습니다. 예 :
save_dict = dict(data=my_df, name='chris', record_date='1/1/2016')
h5io.write_hdf5('path/to/file.hdf5', save_dict)
in_data = h5io.read_hdf5('path/to/file.hdf5')
df = in_data['data']
name = in_data['name']
etc...
또 다른 옵션은 xray 와 같은 프로젝트를 살펴 보는 것 입니다 .이 프로젝트 는 어떤면에서 더 복잡하지만 메타 데이터를 사용할 수 있고 DataFrame으로 변환하기가 매우 쉽습니다.
임의의 속성을 DataFrame 개체에 연결하는 가장 좋은 대답은 좋지만 사전, 목록 또는 튜플을 사용하는 경우 "Pandas에서는 새 속성 이름을 통해 열을 만들 수 없습니다"라는 오류가 발생합니다. 다음 솔루션은 임의의 속성을 저장하는 데 효과적입니다.
from types import SimpleNamespace
df = pd.DataFrame()
df.meta = SimpleNamespace()
df.meta.foo = [1,2,3]
@choldgraf에서 언급했듯이 여러 데이터 프레임간에 데이터를 비교하고 결과를 그릴 때 메타 데이터를 첨부하는 데 xarray 가 훌륭한 도구 라는 것을 발견 했습니다 .
제 작업에서 우리는 종종 여러 펌웨어 개정 및 다른 테스트 시나리오의 결과를 비교하며이 정보를 추가하는 것은 다음과 같이 간단합니다.
df = pd.read_csv(meaningless_test)
metadata = {'fw': foo, 'test_name': bar, 'scenario': sc_01}
ds = xr.Dataset.from_dataframe(df)
ds.attrs = metadata
동일한 문제가 발생하여 메타 데이터가있는 사전에서 더 작은 새 DF를 만드는 해결 방법을 사용했습니다.
meta = {"name": "Sample Dataframe", "Created": "19/07/2019"}
dfMeta = pd.DataFrame.from_dict(meta, orient='index')
이 dfMeta는 피클 등의 원본 DF와 함께 저장할 수 있습니다.
Pickle 파일에 여러 개체 저장 및로드를 참조하십시오 . (Lutz의 답변) pickle을 사용하여 여러 데이터 프레임 저장 및 검색에 대한 탁월한 답변
참고 URL : https://stackoverflow.com/questions/14688306/adding-meta-information-metadata-to-pandas-dataframe
'programing tip' 카테고리의 다른 글
setUseWideViewPort () 및 setLoadWithOverviewMode ()는 정확히 무엇을합니까? (0) | 2020.11.02 |
---|---|
싱글 톤이 안티 패턴으로 간주되는 이유는 무엇입니까? (0) | 2020.11.02 |
동적으로 생성 된 요소에 대한 jQuery "생성시"이벤트 (0) | 2020.11.02 |
단편화 여부-활동에 대한 중첩 단편. (0) | 2020.11.02 |
Swift #selector 구문으로 "모호한 사용"컴파일 오류를 해결하려면 어떻게해야합니까? (0) | 2020.11.02 |