我正在尝试使用以下结构读取csv / txt文件:
caseid eventdate constype consid employid delta
4044 13/11/1996 9 2301 3044 0
这就是我所知道的:
caseid
,consid
和employid
是8位数字符串(前导零将不会出现在文本文件中)eventdate
是dd / mm / yyyy日期costype
是一个字符串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})
但是这不能处理日期和前导零 - 任何想法/建议/帮助将非常感激。
答案 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()