如何在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]
第一个命令工作完全正常。你能解释它的作用吗?由于我需要更改为日期格式,所以我也测试了第二种方法。但是我遇到了一个'ValueError:未转换的数据仍然是:.0'。不知道是什么造成的。我猜的类型佛DF或列? – BallerNacken
@BallerNacken,我已经添加了一个小演示...什么是'MESS_DATUM'的dtype - 我想它是浮动的?在将'df [“MESS_DATUM”]'转换为datetime dtype时,您是否想保留'hour'部分? – MaxU
是'MESS_DATUM'是浮动的。是的,我需要保持一个小时。 – BallerNacken