2016-07-08 4 views
1

어떻게 열을 두 개의 별도 열로 분할 할 수 있습니까? 이것을 적용 할 수있는 방법이 될 것입니까? DataFrame에 다른 열을 유지하고 싶습니다. 예를 들어팬더가있는 DataFrame에서 열을 두 개의 개별 열로 분할하는 방법

나는 열은 날짜와 시간의 무리와 함께 "last_created"라고했다 : "2016년 7월 1일 9시 50분 9초"

나는 두 개의 새로운 열 "날짜"및 "을 만들려면 시간 "을 분할 값으로 변환합니다.

이것은 내가 시도했지만 오류를 반환합니다. 웬일인지 내 데이터가 str에서 float로 변환되어 str에 강제로 전달되었습니다.

def splitter(row): 
    row = str(row) 
    return row.split() 

df['date'],df['time'] = df['last_created'].apply(splitter) 

오류 : 내 경우

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-47-e5a9cf968714> in <module>() 
     7  return row.split() 
     8 
----> 9 df['date'],df['time'] = df['last_created'].apply(splitter) 
    10 df 
    11 #splitter(df.iloc[1,1]) 

ValueError: too many values to unpack (expected 2) 

답변

1

먼저 dtypeobject입니다 to_datetime 경우 변환 후 dt.datedt.time 사용할 수 있습니다

df = pd.DataFrame({'last_created':['2016-07-01 09:50:09', '2016-07-01 09:50:09']}) 
print (df) 
      last_created 
0 2016-07-01 09:50:09 
1 2016-07-01 09:50:09 

print (df.dtypes) 
last_created object 
dtype: object 

df['last_created'] = pd.to_datetime(df.last_created) 

print (df.dtypes) 
last_created datetime64[ns] 
dtype: object 

df['date'], df['time'] = df.last_created.dt.date, df.last_created.dt.time 
print (df) 
     last_created  date  time 
0 2016-07-01 09:50:09 2016-07-01 09:50:09 
1 2016-07-01 09:50:09 2016-07-01 09:50:09 
1

, 나는 단지 기능을 사용. ipython 소스 코드는 아래와 같습니다.

In [5]: df = dict(data="", time="", last_created="") 

In [6]: df 
Out[6]: {'data': '', 'last_created': '', 'time': ''} 

In [7]: df["last_created"] = "2016-07-01 09:50:09" 

In [8]: df 
Out[8]: {'data': '', 'last_created': '2016-07-01 09:50:09', 'time': ''} 

In [9]: def splitter(row): 
    ...:  row = str(row) 
    ...:  return row.split() 

In [10]: df["data"], df["time"] = splitter(df["last_created"]) 

In [11]: df 
Out[11]: 
{'data': '2016-07-01', 
'last_created': '2016-07-01 09:50:09', 
'time': '09:50:09'} 
+0

감사 잭. 더 많은 행을 갖는 더 큰 df에서 값 오류가 반환됩니다. 압축 할 값이 너무 많습니다 (예상 2) – sparrow

1

다음이 적합합니다. 그러나 날짜와 시간을 타임 스탬프로 저장하는 것은 조작하기에 훨씬 편리합니다.

df['date'] = [d.split()[0] for d in df['last_created']] 
df['time'] = [d.split()[1] for d in df['last_created']] 
+0

고마워요! 값이 str에서 float로 변환 되었기 때문에 df [ 'last_created']의 d에 대해 : d = str (d) df [ 'date'] = d.split() [0] – sparrow

관련 문제