在Pandas中读取csv文件时出现日期问题

时间:2017-09-19 15:53:32

标签: python-3.x pandas csv datetime python-datetime

我正在玩时间序列,但在熊猫队伍中对齐日期有很多麻烦。最终,我希望能够连接几个时间序列(每个都在一个单独的csv文件中),但由于日期索引不匹配,连接不起作用。

我的主日期索引由函数fn_range_date()创建,格式为YYYY-MM-DD,而csv文件中的大部分日期格式为DD / YY / YYYY(+时间戳)。我在read_csv中直接尝试使用解析器,但没有成功。

#!/usr/bin/python3
import pandas as pd
import datetime

def fn_range_date():
   start = datetime.date(2015, 9, 21)
   end = datetime.date(2017, 9, 11)
   days = pd.Series(pd.date_range(start, end, freq="W-MON"))
   df = pd.DataFrame({'DateID': days})
   return df

ind = fn_range_date()
ind.set_index('DateID', inplace=True)

df1 = pd.pandas.read_csv('input.csv', index_col=0, header=None).T
df1.columns = ['DateID', 'Value']
df1.set_index(date, inplace=True)

result = ind.join(df1, how='outer')
print (result)

我的csv文件如下所示:

Date    21/09/2015 00:00    28/09/2015 00:00    05/10/2015 00:00    12/10/2015 00:00
Value   40,185  18,246  18,901  19,931

如何解决这个问题?理想情况下,日期应采用YYYY-MM-DD格式。

1 个答案:

答案 0 :(得分:0)

我能够解决这个问题。 csv文件格式很笨拙所以我先调换文件以便正确阅读:

def fn_read_csv(filename):
   pd.read_csv(filename).T.to_csv('temp_' + filename,header=False)
   parser = lambda date: pd.datetime.strptime(date, '%d/%m/%y %H:%M:%S')
   df = pd.pandas.read_csv('temp_' + filename, parse_dates=[0], date_parser=parser, index_col=0)
   df.columns = [filename.replace(".csv","")]
   df.index.rename('DateID', inplace=True)
   os.remove('temp_' + filename)
   return df