有一个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"
)
有人可以帮我吗?
谢谢。
答案 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