我有数据,其中一列,比如第0列,包含类似于'%Y-%m-%d%H:%M:%S'和另一列,比如第1列,包含数百秒的整数。我想将两个列一起读入数据框的索引。使用
parse = lambda d: dt.datetime.strptime(d,'%Y-%m-%d %H:%M:%S %f')
df = pd.read_csv(myFile, sep=';', index_col=0, parse_dates=[[0,1]], \
keep_date_col=True, date_parser=parse)
然而,将所有整数1,2,... 9视为表示10,20,...... 90几百秒。例如。 ' 2013-3-27 09:00:01'第1列中的第0列和第9列将转换为时间戳(' 2013-03-27 09:00:01.900000',tz =无),而不是时间戳(' 2013-03- 27 09:00:01.090000',tz =无)
我想date_parser函数将9作为' 9',但需要将其解释为' 09'。我该如何解决这个问题?
编辑:
df = pd.read_csv(myFile, sep=';')
# with column 'TIMESTAMP' containing the strings and column 'HSEC' containing \
# the ints with the hundreds of seconds
df['newTimestamp'] = pd.to_datetime(df['TIMESTAMP'],format='%Y-%m-%d %H:%M:%S').add(pd.to_timedelta(dataOB['HSEC']*10000000)
dataOB.set_index('new',inplace=True)
dataOB.sort_index(inplace=True)
(不知何故,解决方案经常出现在我在这里发布我的问题之后,尽管在接近论坛之前需要几个小时才能找到它。但是,希望它对其他人也有用。)
答案 0 :(得分:1)
一些虚拟数据
df = pd.read_csv(StringIO("""col1;col2;col3
2014-07-16 14:23:46;1;12
2014-07-16 14:23:53;5;12
2014-07-16 14:23:55;10;12
2014-07-16 14:23:59;15;12
2014-07-16 14:23:59;20;12
2014-07-16 14:24:00;25;12"""), sep=';')
而不是在read_csv
步骤中处理所有内容,可能更容易先读取数据,然后合并列,如下所示?
df['date'] = df['col1'] + '.' + df['col2'].apply(lambda x: str(x).zfill(2))
然后,您可以将组合列传递给pd.to_datetime
并设置索引。
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')