【问题标题】:Generate days row on the basis of date range column根据日期范围列生成天数行
【发布时间】:2015-12-06 16:35:10
【问题描述】:

我有一个包含两列(周和数据)和 100 行的 csv 文件。 看起来像这样:

<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>

由于我是 pandas 的新手,有没有一种简单的方法来实现这种事情? 我的数据集包含 100 行,每行都有一个由日期范围组成的 Week 列。 请帮帮我,我被困在这里。 您的帮助将不胜感激。 谢谢。

【问题讨论】:

    标签: python python-2.7 pandas anaconda


    【解决方案1】:
    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多