【问题标题】:Python DataFrame Loop through an element and assign a valuePython DataFrame 循环遍历一个元素并赋值
【发布时间】:2018-05-17 07:40:35
【问题描述】:

在这里,在我的代码中,相关矩阵是一个数据框,而 diag 是一个列表。 当我运行以下代码(底部的 CholDC 部分)时,它返回 numpy.float64 对象不可迭代。 我需要做什么才能使此代码正常工作?

def CholDC (correl, diag):
    for column in correl:
        j = 0
        for j in correl[str(column)][j]:
            Sum = correl[str(column)][j]
            k = int(column)-1
            if k >= 1:
                Sum = Sum - correl[str(column)][k]*correl[str(j)][k]
            else:
                Sum = Sum
            if int(column) == j:
                if Sum <= 0:
                    print ("Should be PSD")
                else:
                    diag[int(column)] = np.sqrt(Sum)
            else:
                correl[str(j)][int(column)] = Sum / diag[int(column)]

diag = []
df_correl = pd.DataFrame(df_correlation)
CholDC(df_correl, diag)

【问题讨论】:

  • 一些示例数据会有所帮助
  • 请用数据描述或显示您正在尝试的内容(当前和期望的结果),因为您可能会使用 pandas 方法来代替这些 forif 调用。

标签: python loops for-loop dataframe iteration


【解决方案1】:

要遍历数据框,您需要使用 iterrows()。请看下面的例子:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,100, size=(10, 4)), columns=list('ABCD'))

print(df)

for index, row in df.iterrows():
    print(row['B'], row['C'])

#dataframe output

    A   B   C   D
0  53  60  63  44
1  17  12  20  55
2  85  28  76  99
3  39  75  69  30
4   2  85  21   3
5  22   5  45  33
6  78  65  22  38
7  14  99   0  67
8  18  70  53  19
9  54  25  96   7

#output from loop

60 63
12 20
28 76
75 69
85 21
5 45
65 22
99 0
70 53
25 96

所以在你的代码中使用 iterrows() 而不是 for column in correl

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-19
    • 2014-12-19
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多