熊猫点格式日期

时间:2014-05-30 11:16:53

标签: python pandas datetime-format

我希望将一个名为Datetime的列添加到日期时间格式的28.4.2014 12:20:49之类的条目中。当我做的时候

df = pd.read_csv('LOG.TXT', delim_whitespace=True, names=['Datetime', 'x'])
df['Datetime'] = pd.to_datetime(df['Datetime'])
print(df['Datetime'])

我得28.4.2014 2014-05-30 12:20:49 因为Pandas不解析点格式。什么是最好的解决方案?

1 个答案:

答案 0 :(得分:2)

通常pandas应该能够自动解析这个问题,所以我认为你read_csv出了问题:你在日期时间里有空格,但是你也使用空格作为分隔符,因此它会把不同栏目中的日期和时间。

为了说明这一点:

In [67]: s = """28.4.2014 12:20:49 1
   ....: 29.4.2014 12:20:49 2"""

In [68]: from StringIO import StringIO 

In [69]: df = pd.read_csv(StringIO(s), delim_whitespace=True, names=['Datetime', 'x'])

In [70]: df
Out[70]: 
           Datetime  x
28.4.2014  12:20:49  1
29.4.2014  12:20:49  2

In [71]: df['Datetime'][0]
Out[71]: '12:20:49'

In [72]: pd.to_datetime(df['Datetime'][0])
Out[72]: Timestamp('2014-05-30 12:20:49')

日期设置为索引,时间位于Datetime列。使用to_datetime转换此时间时,它将使用今天的日期。

要解决这个问题,有一种可能性(我将其作为三列阅读,然后使用parse_dates=[['Date', 'time']]将这两列一起解析为一个日期时间):

In [92]: df = pd.read_csv(StringIO(s), delim_whitespace=True,
   ....:                 names=['Date', 'time', 'x'], parse_dates=[['Date', 'time']])

In [93]: df
Out[93]: 
            Date_time  x
0 2014-04-28 12:20:49  1

但如果您使用更特殊的格式,则可以始终使用format关键字:

In [66]: pd.to_datetime("28.4.2014 12:20:49", format="%d.%m.%Y %H:%M:%S")
Out[66]: Timestamp('2014-04-28 12:20:49')