【问题标题】:Apply function to list of lists - Python将函数应用于列表列表 - Python
【发布时间】:2020-02-07 04:48:33
【问题描述】:

我的目标是迭代地将列表列表传递给函数,但我返回一个错误。下面的代码创建了一个随机列表。一旦生成,它就会被传递给一个单独的函数。

所以列表列表命名为mult_samples。我希望将它传递给一个函数。

但我无法传递整个列表。如何遍历所有子列表并将输出作为数组或 df 返回?

import pandas as pd
import random
import numpy as np

df = pd.DataFrame({                    
        'X' : [1.0,3.0,2.0,2.0,4.0,3.0,3.0,4.0,4.0],
    })

def randomSamples():

    A = df['X']

    n = len(df['X'])

    maxv = int(A.max())
    minv = int(A.min())

    one_sample = []

    for x in range(0, n):

        one_sample.append(random.randint(minv, maxv))

    samples = [one_sample for _ in range(10)]

    return samples

mult_samples = randomSamples()

子集 list1 和 list2

输出:

mult_samples[0] = [3, 2, 3, 3, 4, 2, 3, 3, 3]

mult_samples[1] = [1, 4, 1, 3, 3, 4, 3, 4, 2]

def func(U, m = 2, r = 0.2):

    def _maxdist(x_i, x_j):
        return max([abs(ua - va) for ua, va in zip(x_i, x_j)])

    def _phi(m):
        x = [[U[j] for j in range(i, i + m - 1 + 1)] for i in range(N - m + 1)]
        C = [len([1 for x_j in x if _maxdist(x_i, x_j) <= r]) / (N - m + 1.0) for x_i in x]
        return (N - m + 1.0)**(-1) * sum(np.log(C))

    N = len(U)

    return abs(_phi(m + 1) - _phi(m))

output_mult_samples = func(mult_samples)

#output_mult_samples = list(map(funclist, mult_samples))

print(output_mult_samples)

出来

mult_samples[0] = 0.253692959177
mult_samples[1] = 0.0397554025155

【问题讨论】:

  • 你能说清楚一点吗
  • @Jeril,现在怎么样?
  • 你能提供更多关于func的信息吗?参数的本质是什么?您预期会发生什么,但实际上发生了什么?
  • func 是做什么的?你能分享它的代码吗

标签: python pandas function apply


【解决方案1】:

根据我从您的问题中推断,假设您想将func 应用于列表中的每个列表,您可以这样进行:

# apply the function 'func' to every LIST inside the main list
output_mult_samples = list(map(func, mult_samples))

编辑:得到有问题的func 定义后,您只需将其映射到列表列表。

另外,您需要修复函数randomSamples。到目前为止,您所做的只是将相同的 one_sample 列表放在您的 samples 中 10 次。你应该这样做:

samples = []

for _ in range(10):
    one_sample = []
    for x in range(0, n):
        one_sample.append(random.randint(minv, maxv))
    samples.append(one_sample)

【讨论】:

  • 谢谢@Jarvis。我已经包含了这个功能。我想我需要更改数据类型。
  • 我已经更新了@Jarvis 的问题。实际上,我在更新的答案中出现了错误。
  • 谢谢贾维斯。这现在正在返回值,但似乎仍在使用单个列表。我将 10 个随机列表导出到辅助函数,它应该返回 10 个不同的值。但它们都是一样的吗?这有意义吗?
  • 那是因为你的mult_samples 不是真的随机的。尝试打印它,您会发现此列表中的所有列表都是相同的。 @jonboy
  • 您检查mult_samples 中的列表是否相同?我不认为他们是,我在更新的答案中提供了修复。 @jonboy
【解决方案2】:

关于如何处理数据,您有很多选择。下面是如何循环嵌套列表的示例。

for i in range(len(mult_samples)):
    print('Here we are in a list: ' + str(mult_samples[i]))
    for j in range(len(mult_samples[i])):
        print('Access location ' + str(j) + 'in list ' + str(i) + ': ' + str(mult_samples[i][j]))

将列表制作成数组np.array(some list)

将python字典制作成数据框pd.DataFrame(some dict)

【讨论】:

    猜你喜欢
    • 2015-08-25
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多