2016-09-07 2 views
0

저는 몇 개의 카탈로그를 생성 중이며 주석을위한 컬럼을 갖고 싶습니다. 어떤 이유로 열을 생성하고 주석을 저장하려고하면 첫 번째 문자 만 사용됩니다. C1 보면 그런astropy 컬럼을 얻는 방법 길이를 나타내는 문자열을 저장 하시겠습니까?

print C1[4] 
>> t 

from astropy.table import Column 

C1 = Column(['']*12, name = 'ID') 
C1[4] = 'test comment' 

, 나는 <Column name='ID' dtype='str1' length=12> 그래서 그것은 분명히 단 한 문자 문자열을 저장하는 것 것을 알 수있다.

내가

C2 = Column(['some really long silly string']*12, name = 'ID') 
C2[4] = 'test comment' 
다음

print C1[4] 
>> test comment 

그러나 다시를하려고하면, 난 단지 <Column name='ID' dtype='str29' length=12> 때문에 29 문자 문자열을 저장할 수 있으며,이 어쨌든 끔찍한 솔루션입니다.

길이 문자열을 저장하도록 열을 어떻게 표시합니까?

+1

관련 항목 : [가변 길이의 numpy 재 배열 문자열] (http://stackoverflow.com/questions/9108837/numpy-recarray-strings-of-variable-length). 예를 들어'Column ([ ''* 12, name = 'ID', dtype = np.object) '을 사용할 수 있습니다. – Evert

+0

이것이 효과가있는 것은 흥미 롭습니다. 'dtype = np.str'을 설정하면 기본값은'str1'입니다. 'np.object'로 일반화하지 않고 다른 해결 방법을 생각할 수 없다면 이것을 대답으로 제출해야합니다. – FriskyGrub

+0

이와 같은 테이블 (numpy의 recarray, Pandas의 데이터 프레임)은 일부 고정 유형 (~ 고정 메모리 할당)으로 만들어 지므로 일반 (가변) 문자열 유형이 없습니다. 예를 들어, 팬더는 문자열로 열을 초기화 할 때'객체 '를 유추합니다. – Evert

답변

0

이 사용 사례의 경우 나는 보통 파이썬 문자열 목록으로 데이터를 수집 한 다음 astropy.table.Column 생성자를 호출합니다.

>>> from astropy.table import Column 
>>> data = ['short', 'something longer'] 
>>> Column(data=data, name='spam') 
<Column name='spam' dtype='str3' length=2> 
    a 
bbb 

Column는 적당한 길이 (좌 패드 공백 짧은 문자열) 문자열 고정 폭 dtype와 NumPy와 배열로 데이터를 변환한다.

마찬가지로, astropy.table.Table 개체를 구성 할 때 나는 보통 파이 데이터를 행 데이터의 사전 목록으로 수집 한 다음 Table 생성자가 적절한 dtype을 자동으로 찾아냅니다.

>>> from astropy.table import Table 
>>> rows = [{'ham': 42, 'spam': 'a'}, {'ham': 99, 'spam': 'bbb'}] 
>>> table = Table(rows=rows, names=['spam', 'ham']) 
>>> table 
<Table length=2> 
spam ham 
str3 int64 
---- ----- 
    a 42 
bbb 99 

당연히 이것은 초고속 또는 메모리 효율이 아니지만 제 신청에는 충분합니다.

더 일반적으로 말하자면 Numpy 배열에 저장된 문자열 (이는 astropy.table.Column이 수행하는 것임)을 사용하는 것이 고통 스럽습니다 (제 의견으로는 Numpy 개발자 나 그 사람을 좋아하지 않는 사람을 공격하는 것이 아닙니다). 내가 알고있는 최선의 지원은 pandas에서 발생하므로 pandas을 사용하여 데이터를 작업하고 천체 표가 필요한 경우 및 방법을 astropy.table.Table으로 사용할 수 있습니다. FITS 파일을 읽고 쓰거나 pandas.DataFrame이 지원하지 않는 다른 작업을 수행하십시오.