【问题标题】:Slicing a string to filter a pandas dataframe切片字符串以过滤熊猫数据框
【发布时间】:2018-10-04 02:32:24
【问题描述】:

应该是一个简单的,只是在查看了任何现有的例子之后没有得到任何地方。

我正在尝试过滤一个 df,其中我的 df 中的日期/时间等于我在另一个名为“date”的变量中的日期/时间。

这两个都存储为字符串。

df['DATE']的格式是这样的:

2017/11/28 14:19:58

日期格式如下:

11/28/2017 14:19

我希望这些返回匹配项。

df = df[df['DATE'][:-3] == date]

我得到的错误是:

raise IndexingError('Unalignable boolean Series provided as '
pandas.core.indexing.IndexingError: Unalignable boolean Series provided 
as indexer (index of the boolean Series and of the indexed object do not match

似乎解释器将其视为我引用 df 位置,而不是在其中切片字符串。

【问题讨论】:

    标签: python string pandas datetime


    【解决方案1】:

    您需要使用pd.Series.str 访问器进行切片:

    from datetime import datetime
    
    s = pd.Series(['2016/09/25 12:29:18', '2017/11/28 14:19:58', '2018/01/02 03:35:12'])
    date = '11/28/2017 14:19'
    
    res = (s.str[:-3] == datetime.strptime(date, '%m/%d/%Y %H:%M').strftime('%Y/%m/%d %H:%M'))
    
    print(res)
    
    0    False
    1     True
    2    False
    dtype: bool
    

    【讨论】:

    • 感谢您的洞察力。我需要做更多的操作,但这种方法的变体有效。
    【解决方案2】:
    df
        DATE
    0   2017/11/21 14:19:58
    1   2017/11/20 14:19:58
    2   2017/11/21 12:19:58
    
    date = '11/20/2017 14:19'
    
    df[df['DATE'].apply(lambda x :pd.to_datetime(x,infer_datetime_format=True).strftime('%m/%d/%Y %H:%M'))==date]
    
        DATE
    1   2017/11/20 14:19:58
    

    如果您想做任何其他基于日期时间的操作,您可以转换其中一个或两个。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2015-09-24
      • 1970-01-01
      • 2019-03-04
      • 2022-07-01
      • 2021-11-11
      • 2022-11-22
      • 2015-08-11
      • 1970-01-01
      相关资源
      最近更新 更多