当我在熊猫中使用apply函数时,它显示“ TypeError:必须为字符串,而不是浮点数”

时间:2018-07-16 17:42:38

标签: python pandas

数据框中的一列是这样的:

2018-01-23 23:55:07

我想将此列中的值转换为Unix时间。 下面是我的代码:

 def convert_to_unix(s):
    return float(time.mktime(datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S").timetuple()))
pd.set_option('display.max_columns', None)
fields=['JOB_START_TIMESTAMP','JOB_END_TIMESTAMP','JOB_RUNTIME_SECONDS', 'JOB_NODES_USED']
df_temp=pd.read_csv('a.csv',usecols=fields)
df_temp['JOB_START_TIMESTAMP']=df_temp['JOB_START_TIMESTAMP'].apply(convert_to_unix)

然后显示错误TypeError: must be string, not floaterror_ image 有谁能够帮助我?非常感谢!

2 个答案:

答案 0 :(得分:0)

下面的代码将日期列(datetime64[ns])转换为unix时间(float64)。

导入库

import pandas as pd
import numpy as np
from datetime import datetime
from time import mktime

创建示例数据框

df = pd.DataFrame({'Date': ['2018-01-23 23:55:07', '2017-01-23 23:55:07', '2015-11-23 11:50:07',
'2013-01-03 13:55:07', '2007-01-24 23:55:07', '2017-12-23 12:55:07']})
df['Date'] = pd.to_datetime(df['Date'])
df

enter image description here

转换为Unix时间的功能

 def convert_to_unix(s):
    return df.apply(lambda x: mktime((x['Date']).timetuple()),axis=1)

获取Unix时间

df['unix_time'] = convert_to_unix(df)
df

enter image description here

df.dtypes

enter image description here

不使用功能的替代方法

df['unix_time'] = df.apply(lambda x: mktime((x['Date']).timetuple()),axis=1)
df

答案 1 :(得分:0)

感谢库纳尔。我的问题是我的数据中有NaTType。 他的回答有效且简洁,因为它在评论中并且被隐藏了,我只是将其放在此处。 df_temp ['JOB_START_TIMESTAMP'] = df_temp ['JOB_START_TIMESTAMP']。apply(pd.Timestamp).apply(pd.Timestamp.timestamp)