我不明白为什么在某些情况下,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
1条答案
按热度按时间disho6za1#
实际上,第二种方法不是扩展
v_split
返回的不同长度的列表,而是将它们分配给一个名为x
的列:而第一种方法确实试图将
get_list
返回的列表(可以具有不同的长度)扩展为新列。所以,如果列表的长度都是一样的,你会得到一个有五列的 Dataframe :
否则,
apply
将按预期失败并引发ValueError: All arrays must be of the same length