我最近接手了一个正在进行的研究项目,令我沮丧的是,我们的本科生研究助理似乎没有遵循我们关于日期条目的编码指南。最小的工作示例如下:
import pandas as pd
MWE = [["05/2003"], ["10/1998"], ["1/4/2014"], ["12/09/1979"]]
df = pd.DataFrame(MWE)
df = df.rename(columns={0: 'year'})
字符串
有一些奇怪的球条目,即“2005年9月12日”和“20221204”,但从我所看到的大多数条目似乎要么遵循%m%y
,%d%m%y
,或%m%d%y
。
1.有超过1万行的数据,有没有什么方法可以快速识别所有不同的日期格式?我最初的方法是print(df["year"].value_counts())
,手动梳理数据以发现所有的变化。这似乎有点乏味,想象一下有更好的方法吗?(我也是从Stata来到Python的,这是一个学习曲线。)
1.理想情况下,我们希望同时保留月份和年份,所以我不确定最好的解决方案。最低限度,如果我们想至少提取年份,我想我可以在适用的情况下使用df['year_only'] = df['year'].str[-4:]
,尽管在最后四位数字不构成年份的情况下,这显然会导致问题。
任何关于如何处理这种困境的想法或建议将不胜感激!
2条答案
按热度按时间ddhy6vgd1#
其中一种可能的方法是从你的框架中获取一个pandas Series,并应用一个合适的正则表达式,通过使用contains方法来识别你在条目中遇到的日期:
https://pandas.pydata.org/docs/reference/api/pandas.Series.str.contains.html
dldeef672#
我向here展示了一种从字符串中识别可能的日期时间格式的方法。然而,在您的情况下,像
1/4/2014
或12/09/1979
这样的日期有很强的模糊性,它们都是有效的D/M/Y
和M/D/Y
。我建议使用不同的格式进行解析(仅使用
dayfirst=True
/dayfirst=False
是一个很好的起点,然后您可以添加其他格式)。第二次,检查两个日期位置是否可以产生不同的有效日期,您可能需要手动分析这些(如果您知道哪个学生填写了哪个日期,您可能可以识别所使用的格式)。字符串
输出量:
型