根据日期范围列生成日期行

时间:2015-12-06 16:35:10

标签: python python-2.7 pandas anaconda

我有一个csv文件,包含两列(Week和Data)和100行。 看起来像这样:

<table>
<tr>
<th>Week</th>
  
  <th>Data</th> 
  
</tr>
  <tr>
   <td>2009-01-04 - 2009-01-10</td>
  
  <td>   Some Data</td>
  </tr>
 
</table>

但我希望以天数为单位转换给定的日期范围。像这样:

<table>
<tr>
<th>Week</th>
  
  <th>Data</th> 
  
</tr>
  <tr><td>2009-01-04</td>
    <td>Some Data</td></tr>
   <tr><td>2009-01-05</td>
    <td>Some Data</td></tr>
   <tr><td>2009-01-06</td>
    <td>Some Data</td></tr>
   <tr><td>2009-01-07</td>
    <td>Some Data</td></tr>
   <tr><td>2009-01-08</td>
    <td>Some Data</td></tr>
   <tr><td>2009-01-09</td>
    <td>Some Data</td></tr>
   <tr><td>2009-01-10</td>
    <td>Some Data</td></tr>
  
  
</table>

由于我是熊猫新手,有没有一种简单的方法可以实现这种目标? 我的数据集包含100行,每行都有一个Week列,该列由日期范围组成。 请帮帮我,我被困在这里。 我们将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:0)

import datetime
from dateutil.parser import parse as parse_date
from pandas import DataFrame

df = DataFrame([['2009-01-04 - 2009-01-10','Some Data'], 
                ['2009-01-11 - 2009-01-17','Some Data']])
df.columns = ['week','data']

def generate_dates(date_range):
    day1_str, day2_str = date_range.split(' - ')
    day1, day2 = parse_date(day1_str), parse_date(day2_str)
    delta = day1 - day2
    return [day1 + datetime.timedelta(days=x) for x in range(0, abs(delta.days + 1))]

def create_rows_from_row(row):
    dates = generate_dates(row['week'])
    return [[d, row['data']] for d in dates]

def create_new_df(df):
    rows = []
    for idx in range(len(df)):
        rows.extend(create_rows_from_row(df.ix[idx]))

    new_df = DataFrame(rows)
    new_df.columns = ['week','data']
    return new_df

create_new_df(df)