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

如何从“生成unix时间列”;年份&引用;日期&引用;“月”&引用;时间“;列,最好使用python的pandas模块,python,pandas,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熊猫数据框架,如下所示 DataFrame u_date

有一个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熊猫数据框架,如下所示

DataFrame
u_datetime,location,count
1547991180,Japan,1
1548930060,Japan,1
1546297200,Japan,1
1546543680,Japan,2
1550006340,Japan,1
其中一种数据帧方法可用于此操作,但它不以一位数字为日期

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"
)
谁能帮我一下吗

谢谢。

试试这个

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']]
输出


您很接近,需要
%Y%b%d%H:%M
格式,然后转换为unix时间,转换为
int64
,整数除以
10**9

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

如果您使用的是csv文件,则可以轻松地使用


是的,您的解决方案可以工作,但OP需要的是pandas解决方案,而不是python。另外
apply
是引擎盖下的循环,因此如果存在向量化解决方案,最好不要使用,这里的函数
pd.to\u datetime
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
dateparse = lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
df = pd.read_csv('/home/users/user/xxx.csv', parse_dates ={'date_time':[0,1,2,4]})
df['u_datetime'] = df['date_time'].values.astype(np.int64) // 10 ** 9
df_new = df[['u_datetime', 'location', 'count']]