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

How to properly read csv with dates and omitted leading zeros in 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 是一个浮点数

现在,正确阅读此 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})

但这无法处理日期和前导零 - 任何 thoughts/suggestions/help 将不胜感激。

以下对我有用,你需要将字典作为参数传递给 dtype,类型应该是可以理解的类型,我会传递 str 而不是 [=14] =],同样,如果您传递参数 parse_dates=[1] 而不是尝试在 dtypes 中指定它,那么 pandas 内置日期解析器就可以很好地解析日期字符串。

要填充零,您可以定义一个函数来填充零并将其传递给参数 converters 传递列的字典和函数名称,对于那些列,不需要传递dtype 因为它将被 padZeros:

转换为 str
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()的输出:

Int64Index: 1 entries, 0 to 0
Data columns (total 6 columns):
caseid       1 non-null object
eventdate    1 non-null datetime64[ns]
constype     1 non-null object
consid       1 non-null object
employid     1 non-null object
delta        1 non-null float16
dtypes: datetime64[ns](1), float16(1), object(4)
memory usage: 50.0+ bytes
None

In [19]:

df
Out[19]:
     caseid  eventdate constype    consid  employid  delta
0  00004044 1996-11-13        9  00002301  00003044      0