根据日期范围列生成天数行
Generate days row on the basis of date range column
我有一个包含两列(周和数据)和 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 行,每行都有一个由日期范围组成的周列。
请帮帮我,我被困在这里了。
您的帮助将不胜感激。
谢谢。
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)
我有一个包含两列(周和数据)和 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 行,每行都有一个由日期范围组成的周列。 请帮帮我,我被困在这里了。 您的帮助将不胜感激。 谢谢。
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)