迭代pandas DataFrame中的每个元素

时间:2016-03-02 21:38:53

标签: python pandas dataframe

所以我得到了一个带有单列和大量数据的pandas DataFrame。

我需要访问每个元素,而不是更改它(使用apply()),而是将其解析为另一个函数。

循环访问DataFrame时,它总是在第一个之后停止。

如果我之前将它转换为列表,那么我的数字全部都是大括号(例如。[12]而不是12)因此破坏了我的代码。

有人看到我做错了吗?

import pandas as pd

def go_trough_list(df):
  for number in df:
    print(number)

df = pd.read_csv("my_ids.csv")
go_trough_list(df)

df看起来像:

   1
0  2
1  3
2  4
dtype: object
[Finished in 1.1s]

编辑:我发现了一个错误。我的第一个值被识别为标题。 所以我将代码更改为:

df = pd.read_csv("my_ids.csv",header=None)

但是

for ix in df.index:
    print(df.loc[ix])

我明白了:

0    1
Name: 0, dtype: int64
0    2
Name: 1, dtype: int64
0    3
Name: 2, dtype: int64
0    4
Name: 3, dtype: int64

编辑:感谢jezrael和Nick,这是我的解决方案!

首先我添加了headings=None,因为我的数据没有标题。 然后我将我的功能改为:

def go_through_list(df)
    new_list = df[0].apply(my_function,parameter=par1)
    return new_list

它完美无缺!再次感谢大家,问题解决了。

3 个答案:

答案 0 :(得分:6)

您可以像在其他答案中一样使用索引,也可以遍历df并访问行,如下所示:

for index, row in df.iterrows():
    print(row['column'])
但是,如果表现有任何问题,我建议以不同方式解决问题。此外,如果只有一列,则使用Pandas Series更为正确。

将其解析为另一个函数是什么意思?也许取得价值,并为此做点什么并将其创建到另一列?

  

我需要访问每个元素,而不是更改它(使用apply()),而是将其解析为另一个函数。

也许这个例子会有所帮助:

import pandas as pd
df = pd.DataFrame([20, 21, 12])
def square(x):
    return x**2
df['new_col'] = df[0].apply(square)  # can use a lambda here nicely

答案 1 :(得分:4)

您可以将列转换为Series tolist

for x in df['Colname'].tolist():
    print x

样品:

import pandas as pd

df = pd.DataFrame({'a': pd.Series( [1, 2, 3]),
                   'b': pd.Series( [4, 5, 6])})
print df
   a  b
0  1  4
1  2  5
2  3  6

for x in df['a'].tolist():
    print x
    1
    2
    3

如果您只有一列,请使用iloc选择第一列:

for x in df.iloc[:,0].tolist():
    print x

样品:

import pandas as pd

df = pd.DataFrame({1: pd.Series( [2, 3, 4])})
print df
   1
0  2
1  3
2  4

for x in df.iloc[:,0].tolist():
    print x
    2
    3
    4  

这也可以,但不推荐使用方法,因为1可以是数字或字符串,它可以引发Key错误:

for x in df[1].tolist():
    print x
2
3
4

答案 2 :(得分:0)

假设您有一个名为' myColumn'的列,并且您在数据框上有一个索引(使用read_csv自动创建)。尝试使用.loc函数:

for ix in df.index:
    print(df.loc[ix]['myColumn'])