首页 > 编程问答 >为什么警告:FutureWarning:设置不兼容的数据类型的项目已被弃用,并且会在 pandas 的未来版本中引发错误?

为什么警告:FutureWarning:设置不兼容的数据类型的项目已被弃用,并且会在 pandas 的未来版本中引发错误?

时间:2024-07-27 05:58:54浏览次数:8  
标签:python pandas

鉴于这种情况,我不明白为什么要提出这个特殊警告。 将函数应用于数字系列时,它会引发“FutureWarning:设置不兼容 dtype 的项目已被弃用,并将在 pandas 的未来版本中引发错误。值 '[0 1 1 ... 1 0 0]' 具有 dtype与 int32 不兼容,请先显式转换为兼容的数据类型。"

这是正在应用的函数:

def rush_hourizer(hour):
    if 6 <= hour['rush_hour'] < 10:
        val = 1
    elif 16 <= hour['rush_hour'] < 20:
        val = 1
    else:
        val = 0
    return val

这是存储的数据类型和数据:

print(df1['rush_hour'].dtype)
print(df1['rush_hour'].unique())
int32
[ 0 14  7 19 17 15 23  6 13 18 12 20 10 21 11  8  2 16  9 22  1  5  4  3]

所以当我运行时:

df1.loc[(df1.day != 'saturday') & (df1.day != 'sunday'), 'rush_hour'] = df1.apply(rush_hourizer, axis=1)

我收到提到了设置不兼容的数据类型的 FutureWarning。 鉴于我正在应用一个数值,我不明白为什么会出现此消息。 我缺少什么?


警告信息告诉你,你虽然在处理数值数据,但试图将一个 NumPy 数组直接赋值给 Pandas Series 的一个切片,而这个数组的数据类型与 Series 不兼容。虽然你的函数返回数值(0 或 1),但 df1.apply(rush_hourizer, axis=1) 返回的是一个 NumPy 数组,默认类型为 int64,而你的 df1['rush_hour'] 列的类型是 int32。

为了解决这个问题,你可以在应用函数后将结果转换为 int32 类型:

df1.loc[(df1.day != 'saturday') & (df1.day != 'sunday'), 'rush_hour'] = df1.apply(rush_hourizer, axis=1).astype('int32')

或者,更有效率的做法是使用 Pandas 内置的向量化操作来避免使用 apply 函数:

df1.loc[(df1.day != 'saturday') & (df1.day != 'sunday'), 'rush_hour'] = (
    ((df1['rush_hour'] >= 6) & (df1['rush_hour'] < 10)) | 
    ((df1['rush_hour'] >= 16) & (df1['rush_hour'] < 20))
).astype(int)

这段代码直接在 DataFrame 上进行逻辑运算,并将结果转换为整数类型,避免了数据类型不匹配的问题,同时也更加简洁高效。

标签:python,pandas
From: 78799996

相关文章

  • Python 需要 Windows 长路径
    我尝试运行此安装:pip3installmsgraph-sdk它给了我这个错误:它说我需要使用此链接启用Windows长路径:https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-versi......
  • Python griddata() 和 Matlab griddata():某些网格点的结果不同
    在将一些(相当大的物理)Matlab代码转换为Python时,我偶然发现了这种情况。当对相同的二维离散数据进行插值时,Python/Scipy的griddata()函数给出的结果与Matlab的对应函数不同。griddata()Matlab示例代码:Python示例代码:%Samplepoints(x,y):7x5=3......
  • Ebay Python SDK 仅在特定项目类别上返回错误
    我在一个项目中使用ebaySDK一段时间了。最近我尝试导入一些商品,例如手表、手机壳等...并且我使用了eBay自己通过eBay返回的英国商店页面上的类别ID他们的“get_category_suggestions”API端点,但eBay似乎有选择地决定拒绝某些项目并引发服务器错误!为了测试,我做了......
  • 使用特定的Python版本(MacOS)制作virtualenv
    我安装了brew,python3(默认和最新版本)和pip3,pyenv。TensorFlow现在不支持python3.7,所以我听说我应该制作一个独立运行3.6或更低版本的virtualenv。我安装了python3.6.7bypyenvinstall3.6.7但无法制作virtualenv-p3.6.7(mydir)因为3.6.7不在P......
  • 使用Python去除图像中的线条
    我正在尝试使用Python和cv2、numpy、skimage等从黑白图像中删除“阴影线”(如果图像中存在“阴影线”)。本质上,我的图像可以有1或2条曲线,如下例所示。但每条线都有一条1-5像素外的阴影线,需要删除。我怎样才能在Python中做到这一点?原始......
  • Python 和 OpenCV:如何裁剪半成形边界框
    我有一个为无网格表创建网格线的脚本:脚本之前:脚本之后:是否有一种简单的方法,使用OpenCV来裁剪“脚本之后”图像,使其仅包含四边边界框?示例输出:编辑:我目前正在研究一种解决方案,该解决方案可以找到垂直/水平方向的第一条/最后一条......
  • 如何将 Pandas Dataframe 过滤为整数值?
    我有一个包含字符串值的数据框列。我想过滤到具有整数的行。我可以执行以下操作来查找它是否是数字,但这也会返回浮点数。result=pd.to_numeric(df['col1'],errors='coerce').notnull()应该返回“1”不应返回“1.1”。如何过滤为整数(不包括漂浮)?可以使用......
  • 使用类型提示将 Python 转换为 Cython
    类型提示现在在Python3.5版本中可用。在规范(PEP484)中,目标(和非目标)被明确暴露:#RationaleandGoals此PEP旨在为类型注释提供标准语法,开放Python代码更容易静态分析和重构、潜在的运行时类型检查以及(也许在某些情况下)利用类型信息生成代码。......
  • 在 Python 类型提示中区分 PySpark 和 Pandas DataFrame (PyCharm)
    在PyCharm中,如果使用apyspark.sql.DataFrame代替pandas.DataFrame,类型提示似乎不会触发警告,反之亦然。例如以下代码根本不会生成任何警告:frompyspark.sqlimportDataFrameasSparkDataFramefrompandasimportDataFrameasPandasDataFramedef......
  • 如何在Python中继承类型提示?
    所以我的问题是,当我有一个A类型的类来做事情并且我使用这些函数作为subclass(B)时,它们仍然是类A的类型,并且不接受我的类B对象作为参数或作为函数签名。我的问题简化了:fromtypingimportTypeVar,Generic,CallableT=TypeVar('T'......