我有一个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列,该列由日期范围组成。 请帮帮我,我被困在这里。 我们将不胜感激。 谢谢。
答案 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)