在Python中转换大型数据集的dtypes的最快方法?

时间:2017-05-22 15:39:31

标签: python pandas

所以,我正在处理一个相对较大的数据集,我觉得将这些列转换为适当的dtypes需要花费很多时间。

到目前为止,我正在使用apply to_datetimeto_numeric,如此:

df.iloc[:,[0,1,9]] = df.iloc[:,[0,1,9]].apply(pd.to_datetime, 
errors='coerce')
df.iloc[:,2:8] = df.iloc[:,2:8].apply(pd.to_numeric, errors='coerce')

我能够转换列,但需要大约20分钟。一定有更快的方法吗?

如果没有,我唯一的选择是削减数据集以进行数据探索或获得更快的计算机吗?

编辑:问题主要是由于使用to_datetime而没有格式化日期和时间。当我删除iloc并应用时,性能也有所改善,尽管它没有格式化日期和时间那么重要。

以下是每个方案所用的时间:

  • 使用iloc进行格式化无需运行1027.11 s
  • 不使用iloc进行格式化需要789.15秒才能运行
  • 格式化日期时间为19.47秒才能运行

巨大的进步。这是在一个包含2,049,280行的数据集上。谢谢@ScottBoston和@DiegoAgher!

1 个答案:

答案 0 :(得分:0)

apply函数通常需要相当长的执行时间。 基于列的操作更快,您可以这样做:

df['column0'] = pd.to_datetime(df['column0'], errors='coerce')

依此类推其他专栏。

此外,如果您有一个特定的列格式,您可以尝试指定它以加快速度。

df['column0'] = pd.to_datetime(df['column0'], format=format, errors='coerce')