2016-02-28 3 views
1

Пожалуйста, я близко к 10 записей в файл CSV, как следоватьпреобразования года в год-месяц-день питон панд CSV

PatienceID  Case  Treatment  Admitted_Date  Discharged_Date 
PAT1002   Fever  Yes   1929-02-10   1929-02-13 
PAT1023   Ebola  Yes   2015-10-21   2015-12-29 
PAT1003   HIV   No   2012    2014-02-21 
PAT1991   Headache  Yes   2013    2013 
PAT2028   Epilepsy  Yes   2011    2016 
PAT2931   Malaria  Yes   2016-01-23   2016 

Пожалуйста, если мы изучаем CSV, есть значения под Admitted_Date и/или Discharged_Date который имеет только год без Месяц-День. Я не знаю, как закончить свидание месяц-день (т.е. так, что Discharge_Date будет предшествовать допускаемой например, давайте рассмотрим Admitted_Date = 2013 и Discharged_Date = 2013, если Admitted_Date имеет 01-01-2013 то Discharged_Date должен 12-12-2013 (с января по декабрь)

У меня есть . опробовали возможности, но это становится грязнее я ценю, спасибо так много

Ожидаемый результат:.

PatienceID  Case  Treatment  Admitted_Date  Discharged_Date 
    PAT1002   Fever  Yes  1929-02-10   1929-02-13 
    PAT1023   Ebola  Yes  2015-10-21   2015-12-29 
    PAT1003   HIV   No   2012-MM-DD  2014-02-21 
    PAT1991   Headache  Yes  2013-MM-DD   2013-MM-DD 
    PAT2028   Epilepsy  Yes  2011-MM-DD   2016-MM-DD 
    PAT2931   Malaria  Yes  2016-01-23   2016-MM-DD 

То, что я пытался до сих пор

import pandas as pd 

DF = pd.read_csv('mydata.csv') 
for Admitted_Date, Discharged_Date in DF 
    pd.to_datetime(mydata.pop('Date'), format="%b%Y") 
+0

Пожалуйста, покажите нам, что вы уже пробовали. –

+0

импорта панды как Pd DF = pd.read_csv ('') mydata.csv для Admitted_Date, Discharged_Date в DF pd.to_datetime (mydata.pop ('Date'), формат = "% B% Y") – Payne

+0

Добавьте свой код к своему ответу. Вставив его, выберите его и нажмите Ctrl + K, чтобы отложить его. –

ответ

1

IIUC вы можете попробовать сначала преобразовать столбцы to_datetime, а затем использовать YearEnd, где длина оригинального столбца является 4 по mask и loc:

df['Admitted_Date'] = pd.to_datetime(df['Admitted_Date']) 
mask = df['Discharged_Date'].str.len() == 4 
print mask 
0 False 
1 False 
2 False 
3  True 
4  True 
5  True 
Name: Discharged_Date, dtype: bool 

df['Discharged_Date'] = pd.to_datetime(df['Discharged_Date']) 
df.loc[mask, 'Discharged_Date' ] += pd.offsets.YearEnd() 
print df 
    PatienceID  Case Treatment Admitted_Date Discharged_Date 
0 PAT1002  Fever  Yes 1929-02-10  1929-02-13 
1 PAT1023  Ebola  Yes 2015-10-21  2015-12-29 
2 PAT1003  HIV  No 2012-01-01  2014-02-21 
3 PAT1991 Headache  Yes 2013-01-01  2013-12-31 
4 PAT2028 Epilepsy  Yes 2011-01-01  2016-12-31 
5 PAT2931 Malaria  Yes 2016-01-23  2016-12-31 
+0

Возможно ли создать новую дату из диапазона доступных дат, например, в ситуации, когда нет единой даты (т. Е. Не предусмотрено года)? Подумайте, что PAT1991 и Admitted_Date и Discharged_Date не указаны, и вы хотите использовать подобные случаи для оценки оценочных дат. – Payne

+0

Если нет значения, как это оценивается? Заменить с минимальной и максимальной «датой»? – jezrael

+0

Извините, Пейн, но я думаю, что это сложнее. Можете ли вы опубликовать новый вопрос? Пожалуйста, не забывайте 'sample', желаемый' output' (с 'date') и что вы пытаетесь. Благодарю. – jezrael

Смежные вопросы