gpt4 book ai didi

python - 如何将自定义函数应用于pandas数据框的每一行

转载 作者:太空宇宙 更新时间:2023-11-03 14:29:57 24 4
gpt4 key购买 nike

我有以下示例:

import pandas as pd
import numpy as np

df = pd.DataFrame([(0,2,5), (2,4,None),(7,-5,4), (1,None,None)])

def clean(series):
start = np.min(list(series.index[pd.isnull(series)]))
end = len(series)
series[start:] = series[start-1]
return series

我的目标是获取一个数据帧,其中包含 None 值的每一行都用最后一个可用的数值填充。

因此,例如,仅在数据帧的第三行上运行此函数,我将生成以下内容:

row = df.ix[3]
test = clean(row)
test

0 1.0
1 1.0
2 1.0
Name: 3, dtype: float64

我无法使用 .apply() 方法使其工作,即 df.apply(clean,axis=1)

我应该提到,这是一个玩具示例 - 我在真实函数中编写的自定义函数在填充值方面更加动态 - 所以我不是在寻找像 .ffill 或 .fillna 这样的基本实用程序

最佳答案

apply 方法不起作用,因为当行完全填满时,由于给定系列的空数组,您的 clean 函数将不知道从哪里开始索引。

因此,在更改系列数据之前使用条件,即

def clean(series):
# Creating a copy for the sake of safety
series = series.copy()
# Alter series if only there exists a None value
if pd.isnull(series).any():

start = np.min(list(series.index[pd.isnull(series)]))

# for completely filled row
# series.index[pd.isnull(series)] will return
# Int64Index([], dtype='int64')

end = len(series)
series[start:] = series[start-1]
return series

df.apply(clean,1)

输出:

     0    1    20  0.0  2.0  5.01  2.0  4.0  4.02  7.0 -5.0  4.03  1.0  1.0  1.0

希望它能澄清为什么 apply 不起作用。我还建议考虑使用内置函数来清理数据,而不是从头开始编写函数。

关于python - 如何将自定义函数应用于pandas数据框的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47368070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com