如何从“年”,“日期”,“月”,“时间”列生成Unix时间列,最好使用python的pandas模块

时间:2019-03-26 06:31:34

标签: python pandas

有一个Excel文件记录一组数据。其列如下,其中每列用逗号分隔。

SampleData
year,date,month,location,time,count
2019,20,Jan,Japan,22:33,1
2019,31,Jan,Japan,19:21,1
2019,1,Jan,Japan,8:00,1
2019,4,Jan,Japan,4:28,2
2019,13,Feb,Japan,6:19,1

根据这些数据,我想创建如下所示的python pandas数据框。

DataFrame
u_datetime,location,count
1547991180,Japan,1
1548930060,Japan,1
1546297200,Japan,1
1546543680,Japan,2
1550006340,Japan,1

其中一个DataFrame方法可用于此操作,但它的日期不包含一位数字。

pandas.to_datetime(
    DataFrame["year"].astype(str)
    + DataFrame["month"].astype(str) 
    + DataFrame["date"].astype(str)
    + DataFrame["time"].astype(str),
    format="%Y%b%d%-H%M"
)

有人可以帮我吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

尝试

from datetime import datetime

data['datetime'] = data[['year','date','month','time']].apply(lambda x: datetime.strptime(str(x['year'])+'-'+str(x['date'])+'-'+str(x['month'])+' '+str(x['time']), "%Y-%d-%b %H:%M").timestamp(), axis=1)

data[['datetime','location','count']]

输出

      datetime  \
0  1548003780.0   
1  1548942660.0   
2  1546309800.0   
3  1546556280.0   
4  1550018940.0   

  location  \
0    Japan   
1    Japan   
2    Japan   
3    Japan   
4    Japan   

   count  
0      1  
1      1  
2      1  
3      2  
4      1 

答案 1 :(得分:1)

如果您使用的是csv文件,可以使用parse_dates轻松完成。

$PWD

答案 2 :(得分:0)

您很亲密,需要%Y%b%d%H:%M格式,然后通过强制转换为int64并用10**9进行整数除法来转换为unix时间:

s = (DataFrame["year"].astype(str)+
     DataFrame["month"].astype(str)+
     DataFrame["date"].astype(str)+
     DataFrame["time"].astype(str))
DataFrame['u_datetime'] = pd.to_datetime(s, format="%Y%b%d%H:%M").astype(np.int64) // 10**9

DataFrame = DataFrame[['u_datetime','location','count']]
print (DataFrame)
   u_datetime location  count
0  1548023580    Japan      1
1  1548962460    Japan      1
2  1546329600    Japan      1
3  1546576080    Japan      2
4  1550038740    Japan      1