Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:Pandas读取csv:Downcasting同时读取csv_Python_Pandas_Csv - Fatal编程技术网

Python:Pandas读取csv:Downcasting同时读取csv

Python:Pandas读取csv:Downcasting同时读取csv,python,pandas,csv,Python,Pandas,Csv,我有以下问题。我想读一个有百万行和无数列的大型csv。我想向下转换列的数据类型。我的方法是读取csv,然后使用pd.to\u numeric()向下转换它。我不知道列的数量和类型。在读取csv时是否有可能向下转换,这样我就不必触摸数据帧两次 我目前的做法是: import pandas as pd df = pd.read_csv(filePath, delimiter=delimiter, memory_map=True,engine='c', low_memory=True) for col

我有以下问题。我想读一个有百万行和无数列的大型csv。我想向下转换列的数据类型。我的方法是读取csv,然后使用
pd.to\u 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')

提前谢谢

如果有人有同样的问题,您可以轻松地读取前两行,计算数据类型并将首选数据类型映射到其上,并在读取整个文件时将其用作数据类型参数:

示例:

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)

关于
read\u csv
dtype
参数:dtype:Type name或dict of column->Type,数据或列的可选数据类型。例如,{'a':np.float64,'b':np.int32,'c':'Int64'}但在这种情况下,我必须知道哪个列应该转换为哪个数据类型,不是吗?但是我不知道我的列的顺序,我的列的数据类型,所以我会尝试从第一行猜测类型。根据您的csv文件包含的内容,它可能是有意义的。或者不知道,但只有你知道;-)你完全正确,这就是我目前正在实施的!!:)很好用!谢谢你的主意!我不敢相信熊猫没有更有效的方法来做到这一点。默认情况下,
.read\u csv()
方法会创建这样一个臃肿的数据帧,简单的向下转换是一件痛苦的事情。