2016-07-08 159 views
1

如何將列分成兩個單獨的列。將適用於這種方式?我想保留DataFrame中的其他列。如何在一個DataFrame中將一列分成兩個單獨的列,並且大熊貓

,比如我有所謂的「last_created」與一羣日期和時間的欄目:「2016年7月1日9時50分09秒」

我要創建兩個新列「日期」和「時間「與拆分值。

這是我試過的,但它返回一個錯誤。出於某種原因,我的數據從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

你可以先轉換to_datetime如果dtypeobject然後用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,所以我必須這樣做:for d in df ['last_created']: d = str(d) df ['date'] = d.split()[0] – sparrow

相關問題