为 pandas.read_csv 指定正确的 dtypes 以获取日期时间和布尔值
Posted
技术标签:
【中文标题】为 pandas.read_csv 指定正确的 dtypes 以获取日期时间和布尔值【英文标题】:Specify correct dtypes to pandas.read_csv for datetimes and booleans 【发布时间】:2013-12-04 10:45:21 【问题描述】:我正在将 csv 文件加载到 Pandas DataFrame 中。对于每一列,如何使用dtype
参数指定它包含的数据类型?
np.bool_
和pd.tslib.Timestamp
都没有运气。
代码:
import pandas as pd
import numpy as np
df = pd.read_csv(<file-name>, dtype='A': np.int64, 'B': np.float64)
【问题讨论】:
查看 date_parser-arguments here。关于布尔值:您的数据如何存储? NumPy Docs 状态np.bool_
用于存储为字节的布尔值(也许您正在使用字符串?)
【参考方案1】:
read_csv 有很多选项可以处理您提到的所有情况。您可能想尝试 dtype='A': datetime.datetime,但通常不需要 dtype,因为 pandas 可以推断类型。
对于日期,则需要指定 parse_date 选项:
parse_dates : boolean, list of ints or names, list of lists, or dict
keep_date_col : boolean, default False
date_parser : function
一般来说,要转换布尔值,您需要指定:
true_values : list Values to consider as True
false_values : list Values to consider as False
这会将列表中的任何值转换为布尔值 true/false。对于更一般的转换,您很可能需要
转换器:字典。用于转换某些列中的值的可选函数字典。键可以是整数或列标签
虽然很密集,但请在此处查看完整列表:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html
【讨论】:
不知道转换器。会调查的。但是指定为整数的类别呢?在我的例子中,我有很多这些特征,因为它们既不是序数、间隔或比率,所以能够将它们指定为名义(分类)是很好的。 如果分类数据是字符串,则将它们保留为字符串并在读取 DataFrame 后转换为整数(或者您可以使用转换器转换特定列)。如果您有类似 int 的类别,那么您不能将它们作为 int 数据类型读入吗? 数据是整数,但它们应该被视为类别。否则许多机器学习模型会以错误的方式使用这些功能。 我跟着你。我的评论是您可以在阅读 CSV 文件时进行转换,也可以在拥有 DataFrame 后进行转换。我个人认为后者更容易一些。阅读数据框后,假设您要将“A”列设为分类。有一点映射: def MapA(int1): if int1==0: return 'category1' elif int1==1: return 'category2' etc... 并创建一个新的分类数据列以上是关于为 pandas.read_csv 指定正确的 dtypes 以获取日期时间和布尔值的主要内容,如果未能解决你的问题,请参考以下文章
pandas.read_csv 将字符串转换为科学记数法中的“数字”(我不想要)
pandas read_csv 列 dtype 设置为十进制但转换为字符串