Python:Pandas读取CSV:读取CSV时向下转换

时间:2019-02-21 16:33:02

标签: python pandas csv

我有以下问题。我想阅读一个具有300万行和多列列的大型csv。我想向下转换列的dtypes。我的方法是读取csv,然后使用pd.to_numeric()向下转换。我不知道列数及其类型。在读取csv时是否有可能向下转换,因此我不必两次触摸数据框?

我目前的做法是:

import pandas as pd
df = pd.read_csv(filePath, delimiter=delimiter, memory_map=True,engine='c', low_memory=True)
for column in df:
    if is_numeric_dtype(df[column]):
       df[column] = pd.to_numeric(df[column], downcast='signed')
       df[column] = pd.to_numeric(df[column], downcast='float')

谢谢!

1 个答案:

答案 0 :(得分:1)

如果有人遇到相同的问题,您可以轻松地读第一行,计算dtype并将其映射为首选dtype,并在读取整个文件时将其用作dtype参数:

示例:

import pandas as pd
df = pd.read_csv(filePath, delimiter=delimiter, nrows=2, low_memory=True, memory_map=True,engine='c')
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)