Python 如何正确读取带有日期和省略前导零的csv?
我正在尝试读取具有以下结构的csv/txt文件:Python 如何正确读取带有日期和省略前导零的csv?,python,date,datetime,csv,pandas,Python,Date,Datetime,Csv,Pandas,我正在尝试读取具有以下结构的csv/txt文件: caseid eventdate constype consid employid delta 4044 13/11/1996 9 2301 3044 0 这是我已经知道的: caseid、consid和employid是8位字符串(前导零不会出现在文本文件中) eventdate是一个dd/mm/yyyy日期 cotype是一个字符串 delta是一个浮点数 现在,正确读取此cs
caseid eventdate constype consid employid delta
4044 13/11/1996 9 2301 3044 0
这是我已经知道的:
caseid
、consid
和employid
是8位字符串(前导零不会出现在文本文件中)eventdate
是一个dd/mm/yyyy日期cotype
是一个字符串delta
是一个浮点数pd.read_csv(path,
types = {'caseid': np.char,
'eventdate': np.datetime64,
'constype': np.char,
'consid': np.char,
'employid': np.char,
'delta': np.float16})
但是这不能考虑日期和前导零-任何想法/建议/帮助都将不胜感激。以下内容对我有效,你需要将dict作为参数传递给
dtype
,类型应该是可以理解的类型,我将传递str
,而不是char
,另外,如果您传递paramparse_dates=[1]
而不是试图在数据类型中指定它,那么内置的日期解析器会很好地解析日期字符串
要填充零,您可以定义一个函数来填充零,并将其传递给param转换器,传递列的dict和函数的名称,对于这些列,无需传递数据类型,因为它将由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()
的输出:
它工作得非常好-谢谢Ed!我还添加了日期分析器(显然,自动分析器不能很好地处理丢失的日期,因此返回字符串:parse_dates=lambda x:date(2020,1,1),如果x是np.nan else datetime.strtime(str(x),“%d/%m/%Y”)
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