【问题标题】:converting year to year-month-day python pandas csv将年转换为年月日 python pandas csv
【发布时间】:2016-02-28 19:29:10
【问题描述】:

请我在 csv 文件中有近 10 个条目,如下所示

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 下的值只有一年没有月日。我不知道如何用 Month-DAY 完成日期(即Discharge_Date 将在承认之前,例如让我们考虑Admitted_Date = 2013Discharged_Date = 2013,如果Admitted_Date01-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")

【问题讨论】:

  • 请向我们展示您到目前为止所做的尝试。
  • 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 ")
  • 请将您的代码添加到您的答案中。粘贴后选中它,按Ctrl+K缩进。
  • 我已经完成了。我已经用代码编辑了这个问题。谢谢

标签: python csv pandas dataframe


【解决方案1】:

IIUC你可以尝试先转换列to_datetime然后使用YearEnd,其中原始列的长度是4 by maskloc

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

【讨论】:

  • 请问是否可以从可用日期范围创建新日期,例如在没有单一日期的情况下(即没有提供年份)?考虑 PAT1991 和 Admitted_Date 和 Discharged_Date 未给出,并且希望使用类似案例来判断估计日期
  • 如果没有值,怎么估算?替换为最小和最大date?
  • 对不起,佩恩,但我认为它更复杂。您可以发布新问题吗?请不要忘记sample、想要的output(和dates)以及您要尝试什么。谢谢。
猜你喜欢
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多