如何在Pandas Dataframe中应用自定义函数来操作列中的浮点数?

ui7jx7zq  于 2022-12-28  发布在  其他
关注(0)|答案(2)|浏览(131)

我是一个Python新手,正在做一个项目,我有一个数据集,需要根据我制作的几个函数中定义的特定条件来操作列中的一些数字。
给定Pandas DataFrame中的一列浮点数,该列具有如下列表,并定义了对数据执行此算法的函数:

df = {'location x': [107.0, 254.0, 52.0, 640.0, 882.0],
        'location y': [252.0, 56.0, 250.0, 86.0, 318.0]}

def change_y(num):
    if num > 470:
        num = 470 - [(num) - 470]
        return num
    else:
        pass

def change_x(num):
    if num < 250:
        num = (250 - num) + 250
        return num
    elif num > 250:
        num = 250 - (num - 250)
        return num
    else:
        pass

使用:

for index in df.index:
    heatmap_df['location y'][index].apply(change_y)
    heatmap_df['location x'][index].apply(change_x)

产生以下错误:

22 for index in df.index:
---> 23     df['location y'][index].apply(change_y)
     24     df['location x'][index].apply(change_x)

AttributeError: 'numpy.float64' object has no attribute 'apply'

正在寻找关于我是否使用了. apply()错误或是否有替代方法的帮助,谢谢!

z9smfwbn

z9smfwbn1#

要使用.apply(),不需要循环,而是可以这样做:

import pandas as pd

df = pd.DataFrame({
    'location x': [107.0, 254.0, 52.0, 640.0, 882.0],
    'location y': [252.0, 56.0, 250.0, 86.0, 318.0],
})

def change_y(num):
    if num > 470:
        num = 470 - (num - 470)
        return num
    else:
        pass

def change_x(num):
    if num < 250:
        num = (250 - num) + 250
        return num
    elif num > 250:
        num = 250 - (num - 250)
        return num
    else:
        pass

# Just to like this without for loop
df['location y'] = df['location y'].apply(change_y)
df['location x'] = df['location x'].apply(change_x)

print(df)
"""
   location x location y
0       393.0       None
1       246.0       None
2       448.0       None
3      -140.0       None
4      -382.0       None
"""

我还将函数change_ynum = 470 - [(num) - 470]更改为num = 470 - (num-470),以避免潜在的错误。

inb24sb2

inb24sb22#

num = (250 - num) + 250num = 250 - (num - 250)是相同的:num = 500 - num适用于所有条件。
您可以只使用矢量代码,这里不需要apply,而且效率很低:

df['location x'] = df['location x'].rsub(500)
df.loc[df['location y']>470, 'location y'] = 940 - df['location y']

输出:

location x  location y
0       393.0       252.0
1       246.0        56.0
2       448.0       250.0
3      -140.0        86.0
4      -382.0       318.0

相关问题