2015-11-17 8 views
2

У меня есть CSV-файл с данными, такие как следующие,Панды диапазон дат отдельных дат

Week,rossmann 
2004-01-04 - 2004-01-10,8 
2004-01-11 - 2004-01-17,10 
2004-01-18 - 2004-01-24,9 
2004-01-25 - 2004-01-31,11 
2004-02-01 - 2004-02-07,9 
2004-02-08 - 2004-02-14,8 
2004-02-15 - 2004-02-21,10 

Я хочу сделать DataFrame с следующими данными:

Day,rossmann 
2004-01-04, 8 
2004-01-05, 8 
... 
2004-01-11, 10 
... 

Что это самый простой способ сделай это?

ответ

1

можно разобрать CSV как обычно:

df = pd.read_csv('data', sep=r',') 

, а затем использовать Series.str.extract для извлечения части Week основанный на регулярных выражений шаблонов:

df['Day'] = df['Week'].str.extract(r'^(\d{4}-\d{2}-\d{2})') 
df = df[['Day', 'rossmann']] 
print(df) 

урожаи

  Day rossmann 
0 2004-01-04   8 
1 2004-01-11  10 
2 2004-01-18   9 
3 2004-01-25  11 
4 2004-02-01   9 
5 2004-02-08   8 
6 2004-02-15  10 

Другой способ сделать это - проанализировать CSV с помощью разделителя регулярных выражений r',| - '. Это было бы разделить CSV на основе запятой или символьной строки, состоящие из пространства с последующим тире с последующим пробелом:

df = pd.read_csv('data', sep=r',| - ', skiprows=1, header=None, 
       names=['Day','rossmann'], usecols=[0,2]) 

дает тот же результат, что и выше.

0
import pandas as pd 

# to get the start of the week day 
def week_starts(week_dates): 
    w_start = str(week_dates)[:10] 
    return w_start 

# to get the end of the week day 
def week_ends(week_dates): 
    w_ends = str(week_dates)[12:] 
    return w_ends 

# import csv into dataframe 
df = pd.DataFrame.from_csv('d.csv',index_col=False,parse_dates=False) 

# create 2 new columns for start of the week day and end of the day week 
df['w_start'] = df['Week'].apply(week_starts) 
df['w_end'] = df['Week'].apply(week_ends) 

# create empty dataframe 
df2 = pd.DataFrame(columns=['Days','Rossmann']) 


# append day and rossmann into new dataframe 
for i in range(len(df)): 
    ross= df.iloc[i]['rossmann'] 
    j = pd.date_range(str(df.iloc[i]['w_start']),str(df.iloc[i]['w_end']),freq='D') 
    temp = pd.DataFrame({'Days':j,'Rossmann':ross}) 
    df2= df2.append(temp,ignore_index=True) 

print(df2) 
Смежные вопросы