2013-02-04 6 views
47

pandas DataFrame에 일부 메타 정보/메타 데이터를 추가 할 수 있습니까?pandas DataFrame에 메타 정보/메타 데이터 추가

예를 들어, 기기의 이름 등의 데이터, 책임 악기를 측정하는 데 사용

한 가지 해결 방법은 해당 정보로 열을 생성하는 것입니다,하지만 단일 정보를 저장하기 위해 낭비 보인다 모든 행에!

답변

47

물론, 대부분의 파이썬 객체처럼, 당신이 pandas.DataFrame에 새로운 속성을 첨부 할 수 있습니다 : 당신이 DataFrame에 속성을 첨부 할 수 있지만, 작업과 같은합니다 (DataFrame에서 수행, 그러나,

import pandas as pd 
df = pd.DataFrame([]) 
df.instrument_name = 'Binky' 

groupby, pivot, join 또는 loc)는 메타 데이터가 첨부되지 않은 새 데이터 프레임 을 반환 할 수 있습니다. 팬더는 아직 전파의 확실한 방법이 없습니다metadata attached to DataFrames.

의 파일을에 보존 할 수 있습니다. 메타 데이터를 HDF5 파일 here에 저장하는 방법의 예를 찾을 수 있습니다.

+4

하나! HDFStore에 이러한 추가 속성을 덤프하려는 경험이 있습니까? –

+4

@DanAllan :'store = pd.HDFStore (...)'이면, 속성은'store.root._v_attrs.key = value'로 저장 될 수 있습니다. – unutbu

+3

이것을 사용할 수있는 다른 사람에게 : 문서에 이에 대한 섹션이 추가되었습니다. http://pandas.pydata.org/pandas-docs/dev/cookbook.html#hdfstore –

9

아니요. @unutbu가 언급 한대로 메타 데이터가 포함 된 특성을 DataFrame 클래스에 추가 할 수 있지만 많은 DataFrame 메서드는 새 DataFrame을 반환하므로 메타 데이터가 손실됩니다. 데이터 프레임을 조작해야하는 경우 메타 데이터와 DataFrame을 다른 클래스로 래핑하는 것이 가장 좋습니다. GitHub에 대한이 토론을 참조하십시오 : https://github.com/pydata/pandas/issues/2485

더 나은 메타 데이터를 지원하는 MetaDataFrame 객체를 추가하려면 현재 pull request이 열려 있습니다.

9

본인이 직접이 문제를 접했습니다. pandas 0.13에서 DataFrames에는 새 DataFrames를 반환하는 함수를 통해 지속되는 _metadata 특성이 있습니다. 또한 직렬화 그냥 잘 살아남을 것으로 보인다 (나는 단지 json 시도했지만 hdf뿐만 아니라 덮여 상상).

+8

'_metadata'는 공용 API의 일부가 아니므로이 기능을 사용하지 않는 것이 좋습니다. – shoyer

+0

@Stephan 당신은 그걸 좀 상세하게 설명 할 수 있습니까? 공개 API의 일부가되는 것이 중요한 이유는 무엇입니까? 귀하의 진술은 0.15 버전에도 해당됩니까? – TomCho

+0

@Stephan 죄송합니다.이 질문에 대한 귀하의 답변을 찾았습니다 : http://stackoverflow.com/a/28054711. 하지만 오늘도 여전히 사실입니까? 래퍼를 만드는 것보다 더 좋은 대안이 있습니까? – TomCho

3

매우 늦게 오면 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로 변환 꽤 쉽게 않습니다 생각합니다.

2

다른 답변 및 의견에서 언급했듯이 _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 
관련 문제