pandas 使用参数result_type=“expand”应用调用:两个应该相同的案例-但不是

xxls0lw8  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(161)

我不明白为什么在某些情况下,application中的result_type=“expand”参数会导致错误(由于列表长度不等),为什么在其他情况下它不会产生错误。也许有人可以向我解释为什么第二种方法不会导致与第一种相同的错误!

import pandas as pd
import numpy as np

df = pd.DataFrame({"x": ["A new result", "Some result"]})

#First approach (correctly results in an error cause of unequal length in output):
def get_list(row):
    if np.random.uniform()>0.5:
        return [i for i in range(5)]
    else:
        return [i for i in range(3)]

df.apply(get_list, axis=1, result_type='expand')

#Second approach: Does not result in an error (why?)
def split_it(x):
    return x.split() # will also produce output of unequal length!

v_split = np.frompyfunc(split_it,1,1)

df.apply(v_split, axis=1, result_type='expand') # does not throw any error
disho6za

disho6za1#

实际上,第二种方法不是扩展v_split返回的不同长度的列表,而是将它们分配给一个名为x的列:

print(df.apply(v_split, axis=1, result_type='expand')) # will never raise an exception
# Output

                  x
0  [A, new, result]
1    [Some, result]

而第一种方法确实试图将get_list返回的列表(可以具有不同的长度)扩展为新列。
所以,如果列表的长度都是一样的,你会得到一个有五列的 Dataframe :

print(df.apply(get_list, axis=1, result_type='expand'))
# Output

   0  1  2  3  4
0  0  1  2  3  4
1  0  1  2  3  4

否则,apply将按预期失败并引发ValueError: All arrays must be of the same length

相关问题