从空间分隔的.dat文件获取日期时间-python/pandas
我正在尝试导入一个以空格分隔的.dat文件,使用pandas和strip值来创建日期。数据如下所示(三行数据取自整个数据集以供参考): 前六个数字组成日期(年、月、日、时、分、秒) 我可以使用以下方法导入数据:从空间分隔的.dat文件获取日期时间-python/pandas,python,pandas,datetime,dataframe,jupyter-notebook,Python,Pandas,Datetime,Dataframe,Jupyter Notebook,我正在尝试导入一个以空格分隔的.dat文件,使用pandas和strip值来创建日期。数据如下所示(三行数据取自整个数据集以供参考): 前六个数字组成日期(年、月、日、时、分、秒) 我可以使用以下方法导入数据: df = pd.read_csv('daily.dat', sep='\s+', header=None) 而且很好 但是,我想将行的前六个条目剥离为一个日期。例如,从第一行开始,前六个数字(或导入到df后的前六列)应为: 2014-01-01 00:00:00 帮助?演示: 当您读
df = pd.read_csv('daily.dat', sep='\s+', header=None)
而且很好
但是,我想将行的前六个条目剥离为一个日期。例如,从第一行开始,前六个数字(或导入到df
后的前六列)应为:
2014-01-01 00:00:00
帮助?演示:
当您读取一个没有列名(标题)的CSV/dat文件时,您将得到一个带有数字列名的DF,如下所示:
In [139]: df
Out[139]:
0 1 2 3 4 5 6 7 8
0 2014.0 1.0 1.0 0.0 0.0 0.0 2.745458 183.33542 -33.580352
1 2014.0 1.0 2.0 0.0 0.0 0.0 -6.133063 251.87292 -13.752231
2 2014.0 1.0 3.0 0.0 0.0 0.0 -30.905729 212.95208 -24.507273
栏目:
In [140]: df.columns
Out[140]: Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype='int64')
可以从多个列组装datetime:
从数据帧的多个列组装日期时间。钥匙
可以是常见的缩写,如['year','month','day','minute','second','ms','us','ns']
)或相同的复数形式
删除前6列:
In [143]: df = df.iloc[:, 6:]
In [144]: df
Out[144]:
6 7 8 date
0 2.745458 183.33542 -33.580352 2014-01-01
1 -6.133063 251.87292 -13.752231 2014-01-02
2 -30.905729 212.95208 -24.507273 2014-01-03
或者(),我们可以这样做:
df = df.drop(columns=df.columns[:6])
您可以尝试以下方法:
import pandas as pd
from datetime import datetime
df = pd.read_csv('daily.dat', sep='\s+', header=None)
def to_datetime(year,month,day,hour,minute,second):
return datetime(int(year),int(month),int(day),int(hour),int(minute),int(second))
df['datetime'] = df.apply(lambda x: to_datetime(x[0], x[1], x[2], x[3], x[4], x[5]), axis=1).apply(str)
df.drop(list(range(6)),1,inplace=True)
print(df)
# output:
# 6 7 8 datetime
#0 2.745458 183.33542 -33.580352 2014-01-01 00:00:00
#1 -6.133063 251.87292 -13.752231 2014-01-02 00:00:00
#2 -30.905729 212.95208 -24.507273 2014-01-03 00:00:00
你可能正在寻找一个答案很好的解决方案。我正在手动转换
日期时间
,但这要好得多。一条评论是最后一滴可能对某些人来说有点难读,我会使用df.drop(columns=list(range(6)),inplace=True)
这是一个更详细的注释。@Idlehands,谢谢你的评论-我已经将它添加到了答案中!真管用!但是你能解释一下为什么设置“cols”吗?这些键是内置于to_datetime中的吗?为什么我不能直接将要转换为datetime的列发送到\u datetime?谢谢@spencerchad,答案中已经有了-Pandaspd.to_datetime()
需要特定的列名-键可以是常见的缩写,如['year','month','day','minute','second','ms','us','ns']),也可以是相同的复数,很可能您有一个更老的Pandas版本-我已经在Pandas 0.22.0下对其进行了测试
df = df.drop(columns=df.columns[:6])
import pandas as pd
from datetime import datetime
df = pd.read_csv('daily.dat', sep='\s+', header=None)
def to_datetime(year,month,day,hour,minute,second):
return datetime(int(year),int(month),int(day),int(hour),int(minute),int(second))
df['datetime'] = df.apply(lambda x: to_datetime(x[0], x[1], x[2], x[3], x[4], x[5]), axis=1).apply(str)
df.drop(list(range(6)),1,inplace=True)
print(df)
# output:
# 6 7 8 datetime
#0 2.745458 183.33542 -33.580352 2014-01-01 00:00:00
#1 -6.133063 251.87292 -13.752231 2014-01-02 00:00:00
#2 -30.905729 212.95208 -24.507273 2014-01-03 00:00:00