我正在玩时间序列,但在熊猫队伍中对齐日期有很多麻烦。最终,我希望能够连接几个时间序列(每个都在一个单独的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格式。
答案 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