首页 > 编程问答 >关于 DataFrame 连接行为的 FutureWarning

关于 DataFrame 连接行为的 FutureWarning

时间:2024-07-27 15:21:31浏览次数:13  
标签:python pandas dataframe future-warning

我正在从包含多个页面的 API 检索数据。

初始页面中的必填字段被添加到 pandas 数据帧 - 在我的代码中,该变量最初定义为 df|| |. 从原始的 API 响应中,我能够了解完整响应中的页面总数,因此我可以创建一个循环来迭代页面并按顺序提取所有信息。

里面我将每个页面连接到原始数据帧(

df )的循环,但在这里我收到“ 未来警告 这里是代码:

这是我收到的完整错误:

df = call_to_api(1)
# call_to_api returns the dataframe, the parameter is the page number

current_page = response['Pagination']['PageNumber']
total_pages = response['Pagination']['NumberOfPages']

while current_page < total_pages:
    current_page = current_page + 1
    df2 = call_to_api(current_page)
    df_list = [df, df2]
    df = pd.concat([df for df in df_list if not df.empty], ignore_index=True) #Future Error happens here

FutureWarning:DataFrame 与空或的连接的行为 all-NA 条目已被弃用。在未来的版本中,这将不再 确定结果数据类型时排除空列或全 NA 列。到 保留旧的行为,排除之前的相关条目 concat 操作

编写此代码的最佳方法是什么,这样我就不会收到未来错误消息?

What is the best way to write this code so that I dont get the Future Error message?


收到此警告是因为可能在使用 pd.concat 连接数据帧时,其中一些数据帧可能包含完全为空或仅包含 NA 值的列。虽然当前版本 pandas 仍然能够处理这种情况,但未来的版本将改变这种行为,这可能会导致错误或意外的结果。

以下是一些可以解决此问题的方案:

1. 在连接之前过滤掉空数据帧:

可以在将数据帧附加到 df_list 之前检查其是否为空,从而避免连接空数据帧。

df = call_to_api(1)
current_page = response['Pagination']['PageNumber']
total_pages = response['Pagination']['NumberOfPages']

df_list = [df]  # 初始化 df_list 包含初始数据帧

while current_page < total_pages:
    current_page += 1
    df2 = call_to_api(current_page)
    if not df2.empty:
        df_list.append(df2)

df = pd.concat(df_list, ignore_index=True) 

2. 使用 dropna 方法:

可以在连接数据帧之后使用 dropna 方法删除包含 NA 值的列或行。

df = pd.concat([df for df in df_list], ignore_index=True)
df.dropna(axis=1, how='all', inplace=True)  # 删除所有值为 NA 的列

3. 指定 pd.concat join 参数:

可以使用 join='inner' 参数来仅连接所有数据帧中都存在的列。

df = pd.concat([df for df in df_list], ignore_index=True, join='inner')

选择哪种方法取决于的具体需求和数据结构。

其他建议:

  • 为了提高效率,可以考虑在循环外预先分配 df_list 的大小,因为已经知道需要获取的页面总数。
  • 使用列表推导可以使代码更简洁:
df_list = [call_to_api(page) for page in range(1, total_pages + 1)]
df = pd.concat([df for df in df_list if not df.empty], ignore_index=True)

希望这些解释和解决方案对有所帮助! 如果还有其他问题,请随时提出。

标签:python,pandas,dataframe,future-warning
From: 78800740

相关文章

  • 如何运行从我正在编写的另一个 Python 脚本获取命令行参数的 Python 脚本?
    我有一个python3脚本,如下所示:...defmain():parser=argparse.ArgumentParser(description='Performnormalisationchecksonpass2files')parser.add_argument('-p','--parser',action='store',help='parse......
  • Python 抓取 urllib2 HTTP 错误
    我正在尝试抓取一个网站,但我的代码仅在我打开该网站然后刷新它时才有效。我尝试了多种方法,但不断出现以下两个错误:第一个:ValueError:“HTTPError:HTTP错误416:请求的范围无法满足”urlslist=open("list_urls.txt").read()urlslist=urlslist.split("\n")forurlslistinurl......
  • 【Python】利用 face_recognition 库进行人脸检测识别【附完整示例】
    1.背景条件1.1安装所需库首先安装face_recognition和Pillow这两个库。您可以使用以下命令来安装它们:pipinstallface_recognitionPillow-ihttps://pypi.tuna.tsinghua.edu.cn/simple1.2拷贝代码安装完成后,您就可以在本地运行以下提供的代码了。importfac......
  • 太强了,Python+Excel真的是神仙组合!
    本书是由流行开源Python库xlwings的创始人:费利克斯·朱姆斯坦(FelixZumstein)所撰写。他详细阐述了如何将Python与Excel结合使用,让任务自动化,从而实现效率飞跃。为了帮助初学者克服对Python的恐惧,作者特意将教程内容设计成从简单到复杂的顺序进行介绍。这本书PDF共282页,分为4个......
  • 在 Python 中获取精确的 Android GPS 位置
    我尝试在Python中获取Android手机的GPS位置(使用QPython3应用程序)。这种可行,但是Android中似乎有几个LocationProvider:gps:纯gps定位,速度慢,耗能,但非常准确,正是我所需要的。网络:GPS和wifi/小区定位的混合,更快,但不太准确被动......
  • 使用 docker run 将 Python 单击选项传递给 ENTRYPOINT 会出现错误:“在 $PATH 中找不
    我有一个简单的python脚本,我想在docker容器内运行它。它打印一行消息“Hello{name}”。python脚本使用clickCLI界面来定义收件人名称,如果我直接运行它(不使用dockerrun命令),它将如下所示:pythonhello.py-nSmithDockerbuild命令:dockerbuild.-thello:1.......
  • 标题:在 OpenSees Python 中定义具有特定卸载行为的双线性弹塑性材料
    我正在使用Python中的OpenSees,我想定义一种在负载下表现出双线性弹塑性行为的材料。但是,我需要在卸载过程中将材质返回到其原始位置,遵循准确的加载路径。在此处输入图像描述我不确定如何在OpenSees中正确实现卸载行为,我正在寻找实现这一具体材料反应的指导。......
  • 使用正则表达式删除Python中常见的公司名称后缀
    我正在努力删除一些公司名称中的后缀。预期结果如下:原始名称:AppleInc.SonyCorporationFiatChryslerAutomobilesS.p.A.SamsungElectronicsCo.,Ltd.清除名称:AppleSonyFiatChryslerAutomobilesSamsungElectronics到目前为止我所做的:importred......
  • 如何将 Brave 网络浏览器与 python、selenium 和 chromedriver 结合使用?
    我从Google的Chrome切换到Brave网络浏览器并且很难让它像Chrome一样与Brave一起使用。Brave是基于Chromium的,所以我猜它应该不会那么难。我确保我的Brave和Chromedriver处于相同版本,像这样,~/some/path$chromedriver--versionChromeDriver76.0.3......
  • 覆盖 python 应用程序时权限被拒绝
    我使用python制作了一个粗略的自动更新应用程序,并使用freeze-cx制作了exe文件。首先,该应用程序检查firebase服务器上是否有最新版本的文件可用,如果可用则下载zip文件。并且应用程序解压并覆盖文件。this_file_path=sys.executableifgetattr(sys,'frozen......