我希望这不是我在程序上做愚蠢的事情。
我有一个带有数值的单行数据框:
df1 A B C D
01-02-2003T00:00:00 5.0 7.0 2.0 4.0 ....
我想根据数据框中的值生成一个元组列表。我执行以下操作:
my_array = numpy.array(df1)
这给了我:
0 1 2 3
0 5.0 7.0 2.0 4.0 ....
然后我这样做:
my_tuple_of_tuples = tuple((0.5*x, 1.5*x) for x in my_array)
我希望这样:
((2.5,7.5),(3.5,10.5),(1.0,3.0),(2.0,6.0))
但是我明白了:
((2.5,3.5,1.0,2.0),(7.5,10.5,3.0,6.0))
我在做什么错了?
答案 0 :(得分:4)
只需索引第一行,然后您的代码就可以工作:
tup = tuple((0.5 * x, 1.5 * x) for x in df.values.tolist()[0])
print(tup)
# ((2.5, 7.5), (3.5, 10.5), (1.0, 3.0), (2.0, 6.0))
之所以有效,是因为
df.values.tolist()[0]
# [5.0, 7.0, 2.0, 4.0]
仅返回第一行中所有元素的列表。现在,迭代将起作用。
如果您需要将其用于多行,则可以将其转换为嵌套循环,或使用chain.from_iterable
。
from itertools import chain
tup = tuple(
(0.5 * x, 1.5 * x) for x in chain.from_iterable(df.values.tolist()))
print(tup)
# ((2.5, 7.5), (3.5, 10.5), (1.0, 3.0), (2.0, 6.0))