如何在熊猫数据框的每一行中应用函数?

时间:2020-06-04 19:57:59

标签: python pandas data-visualization neuroscience

我对编码还很陌生,所以这可能很简单,但是到目前为止,我发现的所有答案都没有以我能理解的方式提供信息。

我想获取一列数据并应用一个函数(a x e ^ bx),其中a> 0并且b <0。在这种情况下,(x)将是我数据的每一行中的浮点值。

看看我到目前为止有什么,但我不确定从这里去哪里...。

def plot_data():

    # read the file
    data = pd.read_excel(FILENAME)

    # convert to pandas dataframe
    df = pd.DataFrame(data, columns=['FP Signal'])

    # add a blank column to store the normalized data
    headers = ['FP Signal', 'Normalized']
    df = df.reindex(columns=headers)
    df.plot(subplots=True, layout=(1, 2))
    df['Normalized'] = df.apply(normalize(['FP Signal']), axis=1)
    print(df['Normalized'])
    # show the plot
    plt.show()

# normalization formula (exponential) = a x e ^bx where a > 0, b < 0
def normalize(x):
    x = A * E ** (B * x)
    return x

我可以显示此图像,但不能显示“规范化”数据...

Subplot image of raw data and normalized data

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您的代码几乎是正确的。

# normalization formula (exponential) = a x e ^bx where a > 0, b < 0
def normalize(x):
    x = A * E ** (B * x)
    return x

def plot_data():

    # read the file
    data = pd.read_excel(FILENAME)

    # convert to pandas dataframe
    df = pd.DataFrame(data, columns=['FP Signal'])

    # add a blank column to store the normalized data
    headers = ['FP Signal', 'Normalized']
    df = df.reindex(columns=headers)
    df['Normalized'] = df['FP Signal'].apply(lambda x: normalize(x))
    print(df['Normalized'])
    df.plot(subplots=True, layout=(1, 2))
    # show the plot
    plt.show()

我将apply行更改为以下内容:df['FP Signal'].apply(lambda x: normalize(x))。 它只需要df ['FP Signal']上的值,因为您不需要整个行。 lambda x表示分配给x的当前值,我们将其发送以进行标准化。

您还可以编写更直接,更简单的df['FP Signal'].apply(normalize)。使用lambda只是我个人的喜好,但许多人可能会不同意。

一个小的补充是在更改数据帧之后放置df.plot(subplots=True, layout=(1, 2))。如果在更改数据框之前绘图,则绘图中将看不到任何变化。 df.plot实际上是在做图,plt.show只是显示它。这就是为什么df.plot必须在处理完数据之后。

答案 1 :(得分:0)

您可以使用map将函数应用于字段

pandas.Series.map


s = pd.Series(['cat', 'dog', 'rabbit'])
s.map(lambda x: x.upper())
0       CAT
1       DOG
2    RABBIT