我遇到以下问题。我想读取一个包含数百万行和数百列的大型 csv。我想向下转换列的数据类型。我的方法是读取 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')
提前致谢!
最佳答案
如果有人遇到同样的问题,您可以轻松阅读前两行,计算数据类型并将您首选的数据类型映射到它上面,并在读取整个文件时将其用作数据类型参数:
示例:
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)
关于Python:Pandas 读取 csv:读取 csv 时向下转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54812001/