【发布时间】:2016-10-22 11:00:41
【问题描述】:
大家好,我想扩大StartDate 和EndDate 所暗示的日期范围。
import pandas as pd
import datetime
from pandas_datareader import data, wb
import csv
out= open("testfile.csv", "rb")
data = csv.reader(out)
data = [[row[0],row[1] + row[2],row[3] + row[4], row[5],row[6]] for row in data]
out.close()
print data
out=open("data.csv", "wb")
output = csv.writer(out)
for row in data:
output.writerow(row)
out.close()
df = pd.read_csv('data.csv')
for DateDpt, DateAr in df.iteritems():
df.DateDpt = pd.to_datetime(df.DateDpt, format='%Y-%m-%d')
df.DateAr = pd.to_datetime(df.DateAr, format='%Y-%m-%d')
df['DateAr'] = [pd.to_datetime(x, format='%Y-%m-%d') for x in df['DateAr']]
df['DateDpt'] = [pd.to_datetime(x, format='%Y-%m-%d') for x in df['DateDpt']]
df['range'] = df['DateDpt']-df['DateAr']
print df
ID ArCityArCountry DptCityDptCountry EndDate StartDate
1922 ParisFrance NewYorkUnitedState 2008-03-10 2008-12-01
1901 ParisFrance LagosNigeria 2001-03-05 2001-02-02
1922 ParisFrance NewYorkUnitedState 2011-02-03 2008-12-01
1002 ParisFrance CaliforniaUnitedState 2003-03-04 2002-03-04
1099 ParisFrance BeijingChina 2011-02-03 2009-02-04
1901 LosAngelesUnitedState ParisFrance 2001-03-05 2001-02-02
输出:
ID ArCityArCountry DptCityDptCountry EndDate
1922 ParisFrance NewYorkUnitedState 2008-03-10
1002 LosAngelesUnitedState ForidaUnitedState 2008-03-10
1901 ParisFrance LagosNigeria 2001-03-05
1922 ParisFrance NewYorkUnitedState 2011-02-03
1002 ParisFrance CaliforniaUnitedState 2003-03-04
1099 ParisFrance BeijingChina 2011-02-03
1901 LosAngelesUnitedState ParisFrance 2001-03-05
StartDate range
2001-02-02 2593 days
2008-12-01 266 days
2001-02-02 31 days
2008-12-01 794 days
2002-03-04 365 days
2009-02-04 729 days
2001-02-02 31 days
预期结果:
让我们考虑row1,我们有 2593 天,我想要从StartDate 即2001-02-02 到EndDate 即2008-03-10 的情况被列出
这应该通过基于范围扩展来遍历所有行,直到 StartDate 上的值与 EndDate 匹配。
ID ArCityArCountry DptCityDptCountry StartDate EndDate
1922 ParisFrance NewYorkUnitedState 2004-03-10 2008-12-01
1922 ParisFrance NewYorkUnitedState 2004-03-11 2008-12-01
1922 ParisFrance NewYorkUnitedState 2004-03-12 2008-12-01
直到它到达 EndDate 的那个日期,这意味着在这两个日期我都应该有类似 StartDate = EndDate 的东西,即两边都是 2008-12-01。考虑到 csv
1922 ParisFrance NewYorkUnitedState 2008-12-01 2008-12-01
非常感谢
关于它的另一个问题:
谢谢..我还有一个问题。我想创建一个 JSON,考虑 StartDate (但是,只要有两个相互匹配的日期,就会使用其中一个日期,而所有属性都将被附加。让我举个例子,
{ "2001-02-02" = { ParisFrance (ArCityArCountry): 1922 NewYorkUnitedStates: 1922} }
如果我们遍历向下的 csv,我们可能会有另一个 2001-02-02。我们可以将它附加到初始 StartDate,而不是创建它。但是,DptCityDptCountry 可能不同,但如果另一个 ID 与 StartDate 和 DptCityDptCountry 匹配,则会将其相加,即
{"2001-02-02" = {
ParisFrance (ArCityArCountry): 1922, 2212 //these are IDs with same StartDate and ArCityArCountry
NewYorkUnitedStates: 1922, 0029 //these are IDs with same StartDate and DptCityDptCountry}
}
【问题讨论】:
-
是否要将第一行扩展到 2593 行?这些行的内容应该是什么?您如何处理明显重叠的日期范围?能否请您发布预期输出的插图?
-
是的,先生...我会这样做的
-
先生,Stefan Jansen 你是问题的解决方案,但我不明白你点击一个的意思。
-
请看下面我的回答。
-
先生,我又添加了一个问题。谢谢