pandas - 将包含字符串的列和包含int的列解析为datetime

时间:2014-07-20 17:13:14

标签: python datetime pandas

我有数据,其中一列,比如第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)

(不知何故,解决方案经常出现在我在这里发布我的问题之后,尽管在接近论坛之前需要几个小时才能找到它。但是,希望它对其他人也有用。)

1 个答案:

答案 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')