【问题标题】:Datetime Pandas Function Only Converting Single SeriesDatetime Pandas 函数仅转换单个系列
【发布时间】:2018-09-28 16:21:36
【问题描述】:

我正在使用几个 pandas 数据帧,每个数据帧都有时间戳,格式如下:“2018-01-01 00:00:00 UTC”。我编写了一个函数,能够扫描数据框的每一列并更改具有这种格式数据的列。函数如下:

def utc_converter(dataframe, timezone):
    columns = dataframe.columns.tolist()
    for column in columns:
        try:
            s = pd.to_datetime(dataframe[column], format='%Y-%m-%d %H:%M:%S UTC', utc=True)
        except ValueError:
            continue
        s.dt.tz_convert(timezone)
        s = s.dt.strftime('%m/%d/%Y %H:%M:%S')
        dataframe[column] = s
    dataframe = dataframe.replace(to_replace=pd.NaT, value=np.nan)
    return dataframe

出于某种原因,每当我在数据帧上运行该函数时,它只会捕获第一列,而不会遍历其余的任何列。有人知道我做错了什么吗?我现在有点摸不着头脑。

谢谢!

【问题讨论】:

  • 用于转换尝试 data.columnname = pd.to_datetime(data['columnname'])

标签: python pandas datetime dataframe


【解决方案1】:

您可以使用pd.to_datetime()strftime() 重新格式化您的日期:

df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d %H:%M:%S UTC', utc=True).dt.strftime('%m/%d/%Y %H:%M:%S')

请注意,这将返回str 类型的列,因此要转换回datetime,只需执行以下操作:

df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y %H:%M:%S')

【讨论】:

    【解决方案2】:

    您可以只考虑第一行来确定 哪些 列在范围内。然后通过pd.DataFrame.apply 在选定的列上使用pd.to_datetime。这是一个演示:

    df = pd.DataFrame([['2018-01-01 00:00:00 UTC', 0, 341.3214, 'test1',
                        '2019-01-01 00:00:00 UTC'],
                       ['2015-01-01 00:00:00 UTC', 46, 235.54, 'test2',
                        '2020-01-01 00:00:00 UTC']],
                      columns=['date1', 'int', 'float', 'string', 'date2'])
    
    dt_format = '%Y-%m-%d %H:%M:%S UTC'
    L = [pd.to_datetime(i, errors='coerce', format=dt_format) for i in df.iloc[0].values]
    dt_cols = df.columns[pd.Series(L).notnull()]
    
    df[dt_cols] = df[dt_cols].apply(pd.to_datetime, format=dt_format)
    

    结果:

    print(df)
    
           date1  int     float string      date2
    0 2018-01-01    0  341.3214  test1 2019-01-01
    1 2015-01-01   46  235.5400  test2 2020-01-01
    
    print(df.dtypes)
    
    date1     datetime64[ns]
    int                int64
    float            float64
    string            object
    date2     datetime64[ns]
    dtype: object
    

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2015-03-23
      • 2019-11-28
      • 2015-01-02
      相关资源
      最近更新 更多