【问题标题】:“Unknown String Format”-Error when parsing URLs in pandas dataframe“未知字符串格式” - 在 pandas 数据框中解析 URL 时出错
【发布时间】:2018-05-12 21:34:20
【问题描述】:

我想从 URL 的 pandas 数据框列中提取日期。 这是我的代码:

import dateutil.parser as dparser
import pandas as pd

    df_results["URL"] = df_results["URL"].astype("str")  # String conversion
    URLs = df_results["URL"].tolist()                    # List creation
    for URL in URLs:                                     # Loop through list
        date = dparser.parse(URL,fuzzy=True)             # Parse date
        print date                                       # Print date

但是,我收到了ValueError: Unknown string format

ValueError                                Traceback (most recent call last)
<ipython-input-23-fd55da2e8e1e> in <module>()
     69 
     70 
---> 71 df_results = parse_URL(df_final) # parse 2
     72 
     73 print df_results.head()

<ipython-input-23-fd55da2e8e1e> in parse_URL(df_final)
     51     URLs = df_results["URL"].tolist()
     52     for URL in URLs:
---> 53         test = dparser.parse(URL,fuzzy=True)
     54         print test
"_")

C:\Python27\lib\site-packages\dateutil\parser.pyc in parse(timestr, parserinfo, **kwargs)
   1180         return parser(parserinfo).parse(timestr, **kwargs)
   1181     else:
-> 1182         return DEFAULTPARSER.parse(timestr, **kwargs)
   1183 
   1184 

C:\Python27\lib\site-packages\dateutil\parser.pyc in parse(self, timestr, default, ignoretz, tzinfos, **kwargs)
    557 
    558         if res is None:
--> 559             raise ValueError("Unknown string format")
    560 
    561         if len(res) == 0:

ValueError: Unknown string format

我假设 URL 存储为某种超链接。但是, df.info() 为URL 显示object dtype。

Q1:如何将 pandas 的 URL 列转换为原始字符串 dtype?

Q2:如何从 Pandas 数据框的 URL 列中提取日期并将其保存到新列中?

【问题讨论】:

    标签: python pandas parsing


    【解决方案1】:

    看来你需要to_datetimeerrors='coerce' 用于NaT 用于不可解析的日期时间,但首先parse url

    from urllib.parse import urlsplit, parse_qs
    
    df = pd.read_csv('data_sample.csv')
    
    f = lambda x: pd.Series({k: v[0] for k, v in parse_qs(urlsplit(x).query).items()})
    df_results = df['URL'].apply(f)
    df_results["checkinDate"] = pd.to_datetime(df_results["checkinDate"], errors='coerce')
    df_results["checkoutDate"] = pd.to_datetime(df_results["checkoutDate"], errors='coerce')
    print (df_results)
    

    【讨论】:

    • 这会留下一个充满“NaT”的列
    • 可以添加数据样本吗?
    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 2019-03-01
    • 2016-04-03
    • 2018-11-10
    • 1970-01-01
    • 2018-02-13
    • 2021-10-26
    • 2021-09-17
    相关资源
    最近更新 更多