如何在Pandas的列中找到部分数值?

问题描述:

我有用熊猫创建的数据框架。它有3列。其中之一的格式为%Y%m%d%H。我需要找到与格式为%Y%m%d的日期匹配的行。如何在Pandas的列中找到部分数值?

我试图

df.loc[df["MESS_DATUM"] == 20170807] 

不工作。只有当我做

df.loc[df["MESS_DATUM"] == 2017080723] 

它适用于单线。但是我需要其他只包含日期的行(不包括小时)。我知道有像.str.cotains("")。有没有类似的数值或在上面的行中使用通配符的方法?

我们可以在 “整数除法” MESS_DATUM列由100

df.loc[df["MESS_DATUM"]//100 == 20170807] 

演示:

In [29]: df 
Out[29]: 
    MESS_DATUM 
0 2017080719 
1 2017080720 
2 2017080721 
3 2017080722 
4 2017080723 

In [30]: df.dtypes 
Out[30]: 
MESS_DATUM int64 
dtype: object 

In [31]: df["MESS_DATUM"]//100 
Out[31]: 
0 20170807 
1 20170807 
2 20170807 
3 20170807 
4 20170807 
Name: MESS_DATUM, dtype: int64 

但我会考虑将其转换为datetime D型:

df["MESS_DATUM"] = pd.to_datetime(df["MESS_DATUM"].astype(str), format='%Y%m%d%H') 

如果df["MESS_DATUM"]float D型的,那么我们可以使用下面的技巧:

In [41]: pd.to_datetime(df["MESS_DATUM"].astype(str).str.split('.').str[0], 
         format='%Y%m%d%H') 
Out[41]: 
0 2017-08-07 19:00:00 
1 2017-08-07 20:00:00 
2 2017-08-07 21:00:00 
3 2017-08-07 22:00:00 
4 2017-08-07 23:00:00 
Name: MESS_DATUM, dtype: datetime64[ns] 
+0

第一个命令工作完全正常。你能解释它的作用吗?由于我需要更改为日期格式,所以我也测试了第二种方法。但是我遇到了一个'ValueError:未转换的数据仍然是:.0'。不知道是什么造成的。我猜的类型佛DF或列? – BallerNacken

+0

@BallerNacken,我已经添加了一个小演示...什么是'MESS_DATUM'的dtype - 我想它是浮动的?在将'df [“MESS_DATUM”]'转换为datetime dtype时,您是否想保留'hour'部分? – MaxU

+0

是'MESS_DATUM'是浮动的。是的,我需要保持一个小时。 – BallerNacken