遍历 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

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

原文由 Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 863
2 个回答

您可以像在其他答案中一样使用索引,也可以遍历 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

原文由 Nick Brady 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题