遍历 Pandas DataFrame 的列

DataFrames 可以非常大,可以包含数百行和列。有必要对 DataFrame 中的列进行遍历,并对列进行单独的操作,如回归和许多其他操作。

我们可以使用 for 循环来遍历 DataFrame 的列。for 循环的基本语法如下。

for value in sequence:
    #Body of Loop

我们可以使用多种方法在 DataFrame 上运行 for 循环,例如,getitem 语法([])、dataframe.iteritems() 函数、enumerate() 函数和使用 DataFrame 的索引。

使用 getitem ([])语法在列上遍历 Pandas

我们可以使用列标签,使用 getitem 语法([])在 DataFrame 上运行 for 循环。例如,我们可以使用列标签在 DataFrame 上运行 for 循环。

import pandas as pd
df = pd.DataFrame([[10,6,7,8],
                   [1,9,12,14],
                   [5,8,10,6]],
                  columns = ['a','b','c','d'])
print(df)
print("------------------")
for column in df:
    print(df[column].values)

输出:

    a  b   c   d
0  10  6   7   8
1   1  9  12  14
2   5  8  10   6
------------------
[10  1  5]
[6 9 8]
[ 7 12 10]
[ 8 14  6]

values() 函数用于将对象的元素提取为列表。

使用 dataframe.iteritems() 遍历 Pandas Dataframe 的列

Pandas 提供了 dataframe.iteritems() 函数,该函数有助于对 DataFrame 进行遍历,并将列名及其内容作为系列返回。

import pandas as pd
df = pd.DataFrame([[10,6,7,8],
                   [1,9,12,14],
                   [5,8,10,6]],
                  columns = ['a','b','c','d'])
for (colname,colval) in df.iteritems():
    print(colname, colval.values)

输出:

a [10  1  5]
b [6 9 8]
c [ 7 12 10]
d [ 8 14  6]

使用 enumerate() 遍历 Pandas Dataframe 的列

enumerate() 与 DataFrame 一起返回索引和列标签,这使我们能够对其进行遍历。

import pandas as pd
df = pd.DataFrame([[10,6,7,8],
                   [1,9,12,14],
                   [5,8,10,6]],
                  columns = ['a','b','c','d'])
for (index, colname) in enumerate(df):
    print(index, df[colname].values)

输出:

0 [10  1  5]
1 [6 9 8]
2 [ 7 12 10]
3 [ 8 14  6]

我们可以非常有效地使用上述任何一种方法来遍历 DataFrame。我们还可以单独在列上运行回归等操作。例如,我们可以将最后一列设置为自变量,并将其他列作为因变量运行 OLS 回归,如下例所示。

import pandas as pd
import statsmodels.api as sm
import numpy as np
df = pd.DataFrame([[10,6,7,8],
                   [1,9,12,14],
                   [5,8,10,6]],
                  columns = ['a','b','c','d'])
for column in df:
    Y = df['d']
    X = df[column]
    X = sm.add_constant(X)
    model = sm.OLS(X,Y)
    results = model.fit()
    print(results.params)

输出:

          0         1
d  0.094595  0.418919
          0     1
d  0.094595  0.75
          0         1
d  0.094595  0.959459
          0    1
d  0.094595  1.0