pandas函数read_csv()读取.csv文件.它的文档在这里
根据文件,我们知道:
dtype:列的类型名称或字典 - > type,default无数据或列的数据类型.例如{'a':np.float64,'b':np.int32}(不支持engine ='python')
和
converter:dict,default无用于转换某些列中的值的函数的字典.键可以是整数或列标签
使用此功能时,我可以调用
pandas.read_csv('file',dtype=object)
或pandas.read_csv('file',converters=object)
.显然,转换器,它的名字可以说数据类型将被转换,但我想知道dtype的情况?
语义差异dtype
允许您指定如何处理值,例如,数字或字符串类型.
转换器允许您使用转换函数解析输入数据以将其转换为所需的dtype,例如,将字符串值解析为datetime或其他所需的dtype.
在这里,我们看到pandas试图嗅探类型:
In [2]: df = pd.read_csv(io.StringIO(t)) t="""int,float,date,str 001,3.31,2015/01/01,005""" df = pd.read_csv(io.StringIO(t)) df.info()Int64Index: 1 entries, 0 to 0 Data columns (total 4 columns): int 1 non-null int64 float 1 non-null float64 date 1 non-null object str 1 non-null int64 dtypes: float64(1), int64(2), object(1) memory usage: 40.0+ bytes
您可以从上面看到001
并被005
视为int64
但日期字符串保持为str
.
如果我们说一切都object
基本上一切都是str
:
In [3]: df = pd.read_csv(io.StringIO(t), dtype=object).info()Int64Index: 1 entries, 0 to 0 Data columns (total 4 columns): int 1 non-null object float 1 non-null object date 1 non-null object str 1 non-null object dtypes: object(4) memory usage: 40.0+ bytes
在这里,我们强制int
列str
并告诉parse_dates
使用date_parser来解析日期列:
In [6]: pd.read_csv(io.StringIO(t), dtype={'int':'object'}, parse_dates=['date']).info()Int64Index: 1 entries, 0 to 0 Data columns (total 4 columns): int 1 non-null object float 1 non-null float64 date 1 non-null datetime64[ns] str 1 non-null int64 dtypes: datetime64[ns](1), float64(1), int64(1), object(1) memory usage: 40.0+ bytes
同样,我们可以传递to_datetime
函数来转换日期:
In [5]: pd.read_csv(io.StringIO(t), converters={'date':pd.to_datetime}).info()Int64Index: 1 entries, 0 to 0 Data columns (total 4 columns): int 1 non-null int64 float 1 non-null float64 date 1 non-null datetime64[ns] str 1 non-null int64 dtypes: datetime64[ns](1), float64(1), int64(2) memory usage: 40.0 bytes