我正在尝试使用无法编辑的excel电子表格来构建机器学习模型。.xls中的一些列存在格式问题,因此一些数据显示为日期时间戳,而不是str或int。以下是pd数据帧中的一个示例:
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,但似乎都不起作用。对于如何用正确的数据替换这个格式错误的数据点有什么想法吗?
发布于 2021-04-21 08:08:44
可能有一种更简单的方法,但您可能需要应用具有正向查找的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
)发布于 2021-04-21 14:26:36
您可以使用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另请参阅:Python pandas: how to obtain the datatypes of objects in a mixed-datatype column?
https://stackoverflow.com/questions/67185498
复制相似问题