繁体   English   中英

迭代pandas DataFrame中的每个元素

[英]Iterating over each element in 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

而且效果很好! 再次感谢你们,问题解决了。

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

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

但是,如果表现有任何问题,我建议以不同方式解决问题。 此外,如果只有一列,使用Pandas系列更为正确。

你把它解析成另一个函数是什么意思? 也许取值,并对它做一些事情并将其创建到另一列?

我需要访问每个元素,而不是更改它(使用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

您可以将列转换为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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM