我正在使用Apriori算法分析一些数据。这要求我将数据框转换为元组数组,每个元组都对应于数据框的“行”。
In [1]: data
Out[1]:
c1 c2 c3 c4 c5
r1 a b c d None
r2 a b c None None
我尝试了下面的代码,但其中仍然有一些“无”。我要删除它们。
In [2]: data = [tuple(x) for x in data.values]
Out[2]:
[('a','b','c','d',None),('a','b','c',None,None)]
我希望这样的数据:
[('a','b','c','d'),('a','b','c')]
答案 0 :(得分:4)
对过滤使用嵌套列表理解:
data = [tuple([y for y in x if y is not None]) for x in data.values]
print (data)
[('a', 'b', 'c', 'd'), ('a', 'b', 'c')]
如果数据量较大,则选择更慢的方法-重新整形以删除None
,并按元组的第一级MultiIndex
进行聚合:
data = data.stack().groupby(level=0).apply(tuple).tolist()
print (data)
[('a', 'b', 'c', 'd'), ('a', 'b', 'c')]
答案 1 :(得分:4)
我们也可以在理解中使用filter
以获得所需的结果。只要确保您的None
都不是字符串即可。
data = [tuple(filter(None, x)) for x in data.values]
print(data)
# [('a', 'b', 'c', 'd'), ('a', 'b', 'c')]
答案 2 :(得分:1)
另一种过滤None
的方法是:
data_without_none = [tuple(row[row != None]) for row in data.values]
答案 3 :(得分:1)
另一种方法可能是使用转置+ apply():
model.fit_generator(
train_generator,
class_weight=class_weights,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps=nb_validation_samples // batch_size,
callbacks=my_callbacks
)