【问题标题】:filter dataframe in pandas by a date column按日期列过滤熊猫中的数据框
【发布时间】:2018-01-18 16:34:23
【问题描述】:

数据在以下链接:http://www.fdic.gov/bank/individual/failed/banklist.html

我只想要 2017 年关闭的银行。我如何在 Pandas 中做到这一点?

failed_banks= pd.read_html('http://www.fdic.gov/bank/individual/failed/banklist.html')
failed_banks[0]

在这些代码行之后我应该做什么来提取所需的结果?

【问题讨论】:

    标签: python pandas data-science


    【解决方案1】:

    这样的东西应该可以工作

    提取结束年份。

    # using pd.to_datetime
    closing_year = pd.to_datetime(failed_banks[0]['Updated Date']).apply(lambda x: x.year)
    # or by splitting the line
    closing_year = failed_banks[0]['Updated Date'].apply(lambda x: x.split(', ')[1])
    

    然后选择。

    failed_banks[0][closing_year=='2017']
    

    【讨论】:

    • DeepSpace 的解决方案对我有用。您的解决方案非常相似。感谢你的帮助。谢谢你:)
    【解决方案2】:

    理想情况下你会使用

    # assuming pandas successfully parsed this column as datetime object
    # and pandas version >= 0.16
    failed_banks= pd.read_html('http://www.fdic.gov/bank/individual/failed/banklist.html')[0]
    failed_banks = failed_banks[failed_banks['Closing Date'].dt.year == 2017]
    

    但是pandas并没有正确地将Closing Date解析为日期对象,所以我们需要自己解析:

    failed_banks = pd.read_html('http://www.fdic.gov/bank/individual/failed/banklist.html')[0]
    
    def parse_date_strings(date_str):
        return int(date_str.split(', ')[-1]) == 2017
    
    failed_banks = failed_banks[failed_banks['Closing Date'].apply(parse_date_strings)]
    

    【讨论】:

    • 感谢您的即时回复!但我不认为它在这里将其解析为日期时间对象。我应该在这里使用正则表达式吗?
    • 输出如下错误---AttributeError: Can only use .dt accessor with datetimelike values
    • @SmithThapa 请参阅我的回答中的内嵌评论。 Pandas 显然没有将Closing Date 列解析为日期,您需要将其转换为日期,然后使用我的答案,或者自己解析日期字符串。
    • 非常感谢。这正是我所需要的。
    猜你喜欢
    • 2020-05-05
    • 2021-08-19
    • 1970-01-01
    • 2020-03-19
    • 2017-12-15
    • 2013-06-09
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多