【发布时间】:2020-12-28 19:40:41
【问题描述】:
我试图在读取它的过程中向下转换 csv 的列,因为在读取文件后这样做太耗时了。到目前为止,一切都很好。如果一列具有 NA 值,当然会出现问题。是否有可能忽略它或在阅读过程中过滤那些可能使用熊猫读取csv的转换器输入? “冗长”的论点有什么作用?文档说明了一些关于指示放置在非数字列中的 NA 值的数量。
到目前为止,我的向下转换方法是读取前两行并猜测 dtype。在读取整个 csv 时,我为 dtype 参数创建了一个映射字典。当然,NaN 值可能会出现在稍后的行中。因此,可能会出现混合数据类型:
import pandas as pd
df = pd.read_csv(filePath, delimiter=delimiter, nrows=2, low_memory=True, memory_map=True,engine='c')
if downcast == True:
mapdtypes = {'int64': 'int8', 'float64': 'float32'}
dtypes = list(df.dtypes.apply(str).replace(mapdtypes))
dtype = {key: value for (key, value) in enumerate(dtypes)}
df = pd.read_csv(filePath, delimiter=delimiter, memory_map=True,engine='c', low_memory=True, dtype=dtype)
【问题讨论】:
-
你能把那些 NA 值设置为其他类型,例如
0s 或 None -
你的意思是我在阅读过程中是否可以,或者我在创建文件时是否可以这样做?
-
我不明白你的意思。我尝试通过仅读取前两行来猜测 dtypes。然后在读取整个csv时为dtype参数创建一个dtype映射dict
-
愚蠢的我,我忽略了这一点。但是,当猜测错误时,您希望发生什么?