我有一个 DataFrame,其中一列存储日期。
但是,其中一些日期是格式正确的日期时间对象,例如 '2018-12-24 17:00:00'
而其他则不是,并且存储为 '20181225'
。
当我尝试使用plotly绘制这些数据时,格式不正确的值变成了EPOCH日期,这是一个问题。
有什么方法可以获取仅包含日期格式正确的行的 DataFrame 副本吗?
我尝试使用
clean_dict= dailySum_df.where(dailySum_df[isinstance(dailySum_df['time'],datetime.datetime)])
方法,但由于“条件数组必须与自身形状相同”错误而不起作用。
dailySum_df = pd.DataFrame(list(cursors['dailySum']))
trace = go.Scatter(
x=dailySum_df['time'],
y=dailySum_df['countMessageIn']
)
data = [trace]
py.plot(data, filename='basic-line')
最佳答案
应用dateutil.parser
,另请参阅我的回答here :
import dateutil.parser as dparser
def myparser(x):
try:
return dparser.parse(x)
except:
return None
df = pd.DataFrame( {'time': ['2018-12-24 17:00:00', '20181225', 'no date at all'], 'countMessageIn': [1,2,3]})
df.time = df.time.apply(myparser)
df = df[df.time.notnull()]
输入:
time countMessageIn
0 2018-12-24 17:00:00 1
1 20181225 2
2 no date at all 3
输出:
time countMessageIn
0 2018-12-24 17:00:00 1
1 2018-12-25 00:00:00 2
与 Gustavo 的解决方案不同,它可以处理根本没有可识别日期的行,并根据您的问题过滤掉此类行。
如果您的原始时间列可能包含除日期本身之外的其他文本,请包含 fuzzy=True
参数,如下所示 here .
关于python - 过滤掉 Python DataFrame 中格式不正确的日期时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57029939/