【问题标题】:How to use dataframe column in for loop如何在for循环中使用数据框列
【发布时间】:2019-07-02 07:54:14
【问题描述】:

我正在尝试实现一个公式,以使用现有列在 Dataframe 中创建一个新列,但该列是从 0 到其他列中存在的数字的总和。

我正在尝试这样的事情:

dataset['B']=sum([1/i for i in range(dataset['A'])])

我知道这样的事情会奏效 dataset['B']=sum([1/i for i in range(10)])

但我想根据一些不同的列使这 10 个动态。

我不断收到此错误。

TypeError: 'Series' 对象不能解释为整数

【问题讨论】:

    标签: python-3.x dataframe


    【解决方案1】:
    1. 首先,我应该承认我不能完全理解你的问题。但是,据我所知,您希望遍历 DataFrame 的行并通过对该值执行一些操作来创建一个新列。 是这样吗,那我推荐你following link

    2. 关于TypeError: 'Series' object cannot be interpreted as an integer: 初始化签名range() 将整数作为输入。即[i for i in range(10)] 应该给你[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。但是,如果您的 dataset['A'] 中的 value 之一是 float 或不是 integer ,这可能会导致您遇到错误。此外,如果您注意到,第一个值是零,因此,1/i 应该会导致不同的错误。因此,您可能必须将代码重写为 [1/i for i in range (1 , row_value_of_dataset['A'])]

    如果您能举例说明您的 DataFrame 可能是什么样子以及您想要的输出是什么,我们将不胜感激。那么也许发布解决方案会更容易。

    顺便说一句,我忘记发布我从你的问题中理解的内容:

    #assume the data:
    >>>import pandas as pd
    >>>data = pd.DataFrame({'A': (1, 2, 3, 4)})
    #the data
    >>>data
      A
    0  1
    1  2
    2  3
    3  4
    #doing operation on each of the rows
    >>>data['B']=data.apply(lambda row: sum([1/i for i  in range(1, row.A)] ), axis=1)
    # Column B is the newly added data
    >>>data
       A         B
    0  1  0.000000
    1  2  1.000000
    2  3  1.500000
    3  4  1.833333
    
    

    【讨论】:

    • 感谢您的解决方案。此方法太慢,因为我正在处理非常大的数据。你能建议一些优化的方法吗?
    • 在numpy中使用numba,然后把它带入dataframe
    【解决方案2】:

    也许明确使用cumsum,甚至apply

    无论如何都试图将数组/列表项直接移动到数据框中,并且似乎将其视为字典。试试这样的,我没测试过,

    array_x = [x, 1/x for x in dataset.values.tolist()] # or `dataset.A.tolist()`
    df = pd.DataFrame(data=(np.asarray(array_x)))
    df.columns = [A, B]
    

    这里的想法是将系列分成一个列表,然后将列表输入到数据框中。这可以显式完成而无需转到 Series->list->dataframe 并且效率不高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-20
      • 2021-08-15
      • 2019-05-11
      • 2014-03-31
      • 1970-01-01
      • 2018-08-23
      • 2021-02-12
      • 1970-01-01
      相关资源
      最近更新 更多