如果列不是所有时间戳,如何用字符串替换数据帧中的时间戳?

2024-09-29 01:31:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用无法编辑的excel电子表格构建机器学习模型。.xls中的一些列存在格式问题,因此某些数据显示为日期时间戳,而不是str或int。以下是pd dataframe中的一个示例:

0     40-49   premeno      15-19                  0-2       yes          3   
1     50-59      ge40      15-19                  0-2        no          1   
2     50-59      ge40      35-39                  0-2        no          2   
3     40-49   premeno      35-39                  0-2       yes          3   
4     40-49   premeno      30-34  **2019-05-03 00:00:00**       yes          2

在第4行中,3-5的值被意外格式化为日期(在xls中显示为03 May),因此在数据帧中被指定为日期时间戳。我尝试了许多方法用3-5替换2019-05-03 00:00:00,包括:

df['column'] = df['column'].replace([('2019-05-03 00:00:00')], '3-5') 

并使用Timestamp.replace,但两者似乎都不起作用。如何用正确的数据替换格式错误的数据点


Tags: 数据no机器编辑df格式时间column
2条回答

可能有一种更简单的方法,但您可能需要将re.search应用于积极的环视

import re

pat1 = '(?<=\*{2}\d{4}-0\d-0)(\d)(?= 00:00:00\*\*)'

pat2 = '(?<=\*{2}\d{4}-0)(\d)(?=-0\d 00:00:00\*\*)'

df['column'] = df['column'].astype(str).apply(
        lambda x: (re.search(pat2, '**2019-05-03 00:00:00**').group()
                   +'-'+re.search(pat1, '**2019-05-03 00:00:00**').group())
                   if '**' in x else x
     )

您可以使用apply迭代该列,并检查该元素是否是pd.Timestamp的实例;如果是,则提取一个字符串“day-month”,否则保留原样

例:

import pandas as pd

# what you have is something like (mixed datatype column/Series)
df = pd.DataFrame({'label': ['0-2', '1-3', pd.Timestamp('2019-05-03')]})

# iterate the column with an apply, extract day-month string if pd.Timestamp
df['label1'] = df['label'].apply(lambda x: f"{x.day}-{x.month}" if isinstance(x, pd.Timestamp) else x)

# ... to get
df['label1'] 
0    0-2
1    1-3
2    3-5
Name: label1, dtype: object

相关问题 更多 >