【问题标题】:Problems while trying to handle ValueError: No tables found with pandas?尝试处理 ValueError 时出现问题:找不到带有 pandas 的表?
【发布时间】:2017-03-17 20:22:32
【问题描述】:

我想从链接序列中的所有表中读取并创建一个数据框。假设我有:

list_links = ['url1.com', 'url2.com', 'url3.com',...,'urln.com']

然后:

for url in lis:
    try:
        df = pd.read_html(url,index_col=None, header=0)
        lis.append(df)
        frame = pd.concat(url, ignore_index=True)
    except:
        pass

但是,我无法获取数据框,没有任何反应:

In: frame

Out:

In: print(frame)

Out: 

在单个表中附加每个链接中的所有表的正确方法是什么?请注意,某些链接没有表格...因此我尝试了pass。我也试过这个:

import multiprocessing
def process_url(url):
    df_url = pd.read_html(url)
    df = pd.concat(df_url, ignore_index=True) 
    return df_url

pool = multiprocessing.Pool(processes=4)
pool.map(process_url, lis)

然后:

ValueError                                Traceback (most recent call last)
<ipython-input-3-46e04cfd0bfe> in <module>()
      7 
      8 pool = multiprocessing.Pool(processes=4)
----> 9 pool.map(process_url, lis)

/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/multiprocessing/pool.py in map(self, func, iterable, chunksize)
    258         in a list that is returned.
    259         '''
--> 260         return self._map_async(func, iterable, mapstar, chunksize).get()
    261 
    262     def starmap(self, func, iterable, chunksize=None):

/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/multiprocessing/pool.py in get(self, timeout)
    606             return self._value
    607         else:
--> 608             raise self._value
    609 
    610     def _set(self, i, obj):

ValueError: No tables found

我也试过这个:

import multiprocessing
def process_url(url):
    df_url = pd.read_html(url)
    df = pd.concat(df_url, ignore_index=True) 
    return df_url

pool = multiprocessing.Pool(processes=4)
try:
    dfs_ = pool.map(process_url, lis)
except: 
    pass

什么也没发生。

【问题讨论】:

    标签: python python-3.x pandas append


    【解决方案1】:

    您实际上并未加入数据框。如果你试试这个:

    df_list = []
    for url in list_links:
        try:
            df = pd.read_html(url, index_col=None, header=0)
            df_list.append(df)
        except:
            pass
    
    df = pd.concat(df_list)
    

    【讨论】:

    • 感谢 alex 的帮助,我得到了这个:TypeError: cannot concatenate a non-NDFrame object in ----&gt; 9 df = pd.concat(df_list)
    • 您是否要堆叠它们:通过添加更多行来扩展列或通过添加更多列来扩展行。根据您想要做什么,您可以尝试将轴参数设置为 0 或 1。也可以尝试我上面的新建议
    • 再次感谢!...我尝试了两者(在 concat 中)并且我得到了相同的异常。
    • 我得到的第二个:ValueError: No tables found
    • 我明白了,所以 try except 方法更好,因为它避免了这个错误。您将不得不更多地研究该错误。您可以尝试仅连接一些数据帧,看看是否可以识别有问题的数据帧。或者,您可以尝试使用连接和合并数据框方法。祝你好运。
    猜你喜欢
    • 2020-03-29
    • 2023-04-05
    • 2020-11-02
    • 2019-08-12
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2021-10-25
    相关资源
    最近更新 更多