如何将a列拆分为两个单独的列。适用的方法是这样的吗?我想保留DataFrame中的其他列。
例如,我有一个名为“last_created”的列,其中包含一堆日期和时间:“2016-07-01 09:50:09”
我想用分割值创建两个新列“date”和“time”。
这是我尝试的但是它返回了一个错误。出于某种原因,我的数据从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)
答案 0 :(得分: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'}
答案 1 :(得分:1)
以下内容适合您。但是,将日期和时间存储为时间戳非常便于操作。
df['date'] = [d.split()[0] for d in df['last_created']]
df['time'] = [d.split()[1] for d in df['last_created']]
答案 2 :(得分:1)
如果dtype
为object
,您可以先转换to_datetime
,然后使用dt.date
和dt.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