【问题标题】:Generating tuples from DataFrame row elements从 DataFrame 行元素生成元组
【发布时间】:2018-12-16 14:25:55
【问题描述】:

我希望这不是我以编程方式做一些愚蠢的事情。

我有一个带有数值的单行数据框:

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)) 

我做错了什么?

【问题讨论】:

    标签: python pandas dataframe tuples


    【解决方案1】:

    只需索引第一行,您的代码就可以工作了:

    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))
    

    【讨论】:

    • 谢谢。我无法得到这个。 [0] 有什么作用?我似乎无法生成中间结果以便更好地理解(例如tuple((0.5 * x, 1.5 * x) for x in df.values.tolist()) 引发错误。似乎[0] 指的是列表中的一个元素。但我不确定为什么需要它。请您帮忙详细点?
    • @Windstorm1981 df.values.tolist() 返回只有 1 个子列表的列表列表。既然你提到数据只有一行,我就用[0] 访问了它。
    • 我在发帖前尝试了df.valuesdf.values.tolist()。当您说“子列表列表”时,中间步骤是这样的:[[2.5,7.5],[3.5,10.5]...]?那不可能是因为[0] 将指向第一个子列表。我怎么会误会?谢谢。
    • @Windstorm1981 你说你有一个单行数据框。所以,df.values.tolist() 返回[[5.0, 7.0, 2.0, 4.0]]。我做df.values.tolist()[0] 得到[5.0, 7.0, 2.0, 4.0]。然后,我遍历这些元素并将它们转换为您问题中指定的元组。希望对您有所帮助。
    • 是的,我现在明白了!谢谢。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 2015-08-13
    • 2013-04-14
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多