代码之家  ›  专栏  ›  技术社区  ›  jssm

如何使用TimeDelta和NaN读取csv?

  •  1
  • jssm  · 技术社区  · 7 年前

                  col 1             col 2             col 3      ...     col N
    0        0 days 00:00:16   0 days 00:00:07   0 days 00:01:02          NaN
    .
    .
    .
    15000    0 days 01:40:00         NaN               NaN       ...      NaN
    

    我试过的:

    df = pd.read_csv('file.csv', sep=',', index_col=0, dtype=object)
    df = df.applymap(lambda x: pd.to_timedelta(x))
    

    但由于我有很多列和行,所以速度有点慢。有更合适的方法吗?

    1 回复  |  直到 7 年前
        1
  •  3
  •   cs95 abhishek58g    7 年前

    TimeDelta对象不受 parse_dates dtype 中的参数 read_csv . 这里有几个备选方案。

    apply + to_timedelta

    df = df.apply(pd.to_timedelta, errors='coerce')
    

    或者,

    for c in df.columns:
        df[c] = pd.to_timedelta(df[c], errors='coerce')
    

    pd.read_csv(..., converters=...)

    另一种选择是通过 converters 加载时的参数:

    f = {i : pd.to_timedelta for i in range(N)}  # you can access columns by index
    df = pd.read_csv('file.csv', sep=',', index_col=0, converters=f)