2017-01-26 1 views
0

Dataframe의 여러 열을 하나의 열로 결합하려는 경우 이러한 열의 배열이 포함됩니다. 이것의Pandas ValueError에서 여러 열을 배열 결과로 결합

간단한 예 :

sn | a | b | c | 
---+-----+-----+-----+ 
a1 | 1 | 1 | None| 

sn | a | b | c | array | 
---+-----+-----+-----+-----------+ 
a1 | 1 | 1 | None| [1,1,None]| 

에 내가 내 데이터를 분석하고 PostgreSQL을에 Dataframe를 작성하는 팬더 (및 SQL-연금술)를 사용하기 때문에이 작업을 수행 할 수 - Dataframe.to_sql을 사용하여 테이블. 나는 숫자 [], 텍스트 [], 정수 [] 등을 사용하여이를 테스트했다. Postgres에서 -columns를 사용하고 to_sql은 None을 NULL로 바꾼다. 나는 (단순히 텍스트 []로 저장하기 전에) 타임 스탬프 배열을 저장하고 싶어 할 때까지 불평하는

def timeseries(collist): 
output = [] 
for col in collist: 
    if str(col) in ['nan','None','NaT']: 
     col = None 
    output.append(col) 
return output 

dataframe['arraycolumn'] = dataframe.apply(lambda row: timeseries(row[collist1]), axis=1) 

아무것도 :

는이를 달성하기 위해 나는이 간단한 함수를 썼다. postgresql이 ISO 타임 스탬프 (타임 스탬프 [] 열에 저장하려고 시도하기 때문에)를 선호하기 때문에 잘못된 형식의 타임 스탬프를 받고 pd.to_datetime (df [ 'timestampcolumn'])을 사용합니다. 그러나 pd.to_datetime으로 캐스팅 한 후 필자의 기능이 더 이상 작동하지 않습니다. , https://github.com/cherryskizz/pandasarrayproblem/blob/master/theproblem.ipynb

내가 파이썬 3.4.4, 3.5.2와이 테스트 18.1과 19.0을 판다 :

collist = ['a','datetime'] 
df['c'] = df.apply(lambda row: timeseries(row[collist]), axis=1) 

ValueError: Shape of passed values is (...), indices imply (...) 

은 내가 ipynb를 준비했다.

pd.to_datetime을 사용하지 않고 이러한 열을 구문 분석하는 함수를 작성할 수 있지만이를 해결하는 다른 방법이있을 수 있습니까? 이것을 성취하기 위해 판다 스 기능이 있습니까?

답변

1

새로운 DataFrame을 만들려고 할 때 버그가있는 것처럼 보였습니다. 몇 가지 이유 때문에 인덱스와 열이 섞여서 나타납니다. 그러나 내가 이것을했을 때 그것은 나를 위해 일했다 :

# transpose and apply column wise 
df['c'] = df.T.apply(lambda row: timeseries(row[collist]), axis=0) 

꽤 이상하지만 나를 위해 일했다.

+1

실제로 이상하지만 작동합니다. 고맙습니다. 노력해 주셔서 감사합니다.하지만 지금은이 질문을 공개하도록하겠습니다. 어쩌면 누군가가 왜 색인과 열이 섞여 있는지 또는이 문제에 대한 또 다른 해결책을 찾을 수 있는지 설명 할 수 있습니다. – CherrySkizz

관련 문제