【问题标题】:Pandas failure in creating date time objects from list of strings while row iterationPandas 在行迭代时无法从字符串列表创建日期时间对象
【发布时间】:2019-12-29 02:46:38
【问题描述】:

enter image description here我有一个 pandas 数据框,其中有一列包含格式化为字符串的日期列表,例如: ['2019-08-19', '2018-04-23']

我正在尝试将这些列表转换为 DateTime 对象列表,以便我可以通过 df.iterrows() 迭代地将这些日期与具有类似格式的另一列中的日期进行比较。

我尝试了类似的方法:

#
<i>for index, row in merged_list.iterrows():`enter code here`
    scs_date = list(row["scs_date"])
    print(scs_date) 
    print(type(scs_date))
    l1 = pd.to_datetime(row["scs_date"]).dt.date.unique().tolist()<i>
#

但它不断将列表拆分为单个字符,并抱怨它无法将项目转换为日期时间对象。

我也试过了:

l1 = [datetime.strptime(date,"%Y-%m-%d").date() for date in scs_date]

它再次不起作用并给了我这个错误:

“ValueError:时间数据'['与格式'%Y-%m-%d'不匹配” 在此输入代码

任何线索, 谢谢

更新:

如果有帮助,我已经添加了一个示例数据框。 最终目标是找出 DAY_1 列中的任何日期是否存在于同一行的 DAY_2 列中。谢谢

https://i.stack.imgur.com/7HuSj.png

【问题讨论】:

    标签: pandas list dataframe datetime


    【解决方案1】:

    发布您的数据的实际样子会让您受益。

    df =pd.DataFrame(
        [[['2019-08-19', '2018-04-23']],
         [['2019-08-19', '2018-04-23']],
         [['2019-08-19', '2018-04-23']],
         [['2019-08-19', '2018-04-23']]])
    
    
    def f(v):
        return [datetime.datetime.strptime(date, '%Y-%m-%d') for date in v]
    
    df[0] = df[0].map(f)
    print(df)
                                                0
    0  [2019-08-19 00:00:00, 2018-04-23 00:00:00]
    1  [2019-08-19 00:00:00, 2018-04-23 00:00:00]
    2  [2019-08-19 00:00:00, 2018-04-23 00:00:00]
    3  [2019-08-19 00:00:00, 2018-04-23 00:00:00]
    

    【讨论】:

    • 感谢 manwithfewneeds。我尝试了代码,但得到了这个错误:ValueError: time data '[' does not match format '%Y-%m-%d'..我认为出于某种原因,Pandas 将整个列表识别为一个长字符串..我还尝试通过删除字符串从单元格中删除 ' ,但这没有帮助..我已经包含了数据框的示例图像并添加了问题的更新..如果您能对此发表评论,我真的很感激。
    • 那是因为你认为看起来像列表的东西实际上是一个字符串。您需要 str.strip 以取出这些括号并在逗号上执行 str.split 以获取列表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 2018-12-19
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多