所以我得到了一个带有单列和大量数据的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
它完美无缺!再次感谢大家,问题解决了。
答案 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'])