将pandas dataframe中的多个列更改为datetime

kwa*_*122 20 python datetime pandas

我有一个13列和55,000行的数据框我试图将其中5行转换为datetime,现在他们返回类型'object'我需要转换这些数据用于机器学习我知道如果我这样做

data['birth_date'] = pd.to_datetime(data[birth_date], errors ='coerce')
Run Code Online (Sandbox Code Playgroud)

它会返回一个datetime列,但是我也想为其他4列做这个,是否有一行可以写入来调用所有这些列?我不认为我可以索引

data[:,7:12]
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ted*_*rou 33

您可以使用apply迭代遍历每列pd.to_datetime

data.iloc[:, 7:12] = data.iloc[:, 7:12].apply(pd.to_datetime, errors='coerce')
Run Code Online (Sandbox Code Playgroud)

  • 使用 `errors='coerce'`,无效日期被分配给 `NaT` - 来自 [here](https://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.to_datetime. html#pandas-to-datetime) 显示了这一点。如果使用 `ignore` 代替 `coerce`,它将忽略它是无效规范这一事实,并只返回一个(可能)无效/不正确的日期。 (2认同)

小智 14

my_df[['column1','column2']] =     
my_df[['column1','column2']].apply(pd.to_datetime, format='%Y-%m-%d %H:%M:%S.%f')
Run Code Online (Sandbox Code Playgroud)

注意:当然,可以根据需要更改格式。


Ser*_*Dev 11

如果性能是一个问题,我建议使用以下函数将这些列转换为date_time:

def lookup(s):
    """
    This is an extremely fast approach to datetime parsing.
    For large data, the same dates are often repeated. Rather than
    re-parse these, we store all unique dates, parse them, and
    use a lookup to convert all dates.
    """
    dates = {date:pd.to_datetime(date) for date in s.unique()}
    return s.apply(lambda v: dates[v])

to_datetime: 5799 ms
dateutil:    5162 ms
strptime:    1651 ms
manual:       242 ms
lookup:        32 ms
Run Code Online (Sandbox Code Playgroud)

资料来源:https: //github.com/sanand0/benchmarks/tree/master/date-parse

  • 如果数据框很深并且日期不呈正态分布,那么这些数字看起来不会那么令人印象深刻。我在数据框(273771)上运行代码,to_datetime 时间为 1 分 13 秒,而查找时间为 59 秒。 (2认同)

smi*_*hra 10

如果你想在加载时转换,你可以做这样的事情

date_columns = ['c1','c2', 'c3', 'c4', 'c5']
data = pd.read_csv('file_to_read.csv', parse_dates=date_columns)
Run Code Online (Sandbox Code Playgroud)