如何正确读取带有日期的csv并省略熊猫中的前导零?

时间:2015-02-14 21:26:26

标签: python date datetime csv pandas

我正在尝试使用以下结构读取csv / txt文件:

caseid   eventdate     constype  consid  employid  delta
4044     13/11/1996    9         2301    3044      0

这就是我所知道的:

  1. caseidconsidemployid是8位数字符串(前导零将不会出现在文本文件中)
  2. eventdate是dd / mm / yyyy日期
  3. costype是一个字符串
  4. delta是一个浮动
  5. 现在,正确读取此csv / text的pandas语法是什么,以便所有列都被适当地键入?

    我正在使用它:

    pd.read_csv(path, 
                types = {'caseid': np.char,
                         'eventdate': np.datetime64,
                         'constype': np.char,
                         'consid': np.char,
                         'employid': np.char,
                         'delta': np.float16})
    

    但是这不能处理日期和前导零 - 任何想法/建议/帮助将非常感激。

1 个答案:

答案 0 :(得分:2)

以下对我有用,你需要将一个字典作为参数传递给dtype,类型应该是理解的类型,我传递str而不是{{1 ,如果你传递参数char而不是尝试在dtypes中指定它,那么在日期解析器中构建的pandas会解析日期字符串就好了。

要填充零,您可以定义一个函数来填充零并将其传递给参数parse_dates=[1]传递列的字典和函数名称,对于那些列,它不是必需的传递dtype,因为它将被converters转换为str这一事实:

padZeros

来自def padZeros(x): return str(x).zfill(8) df = pd.read_csv(path, sep='\s+', dtype = {'constype': str, 'delta': np.float16}, parse_dates=[1], converters={'caseid':padZeros, 'consid':padZeros, 'employid':padZeros}) 的输出:

df.info()