python-3.x 属性错误:“Series”对象没有属性“iterrows”

niknxzdl  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(556)
accounts = pd.read_csv('C:/*******/New_export.txt', sep=",", dtype={'number': object})
accounts.columns = ["Number", "F"]

for i, j in accounts["Number"].iterrows(): #i represents the row(index number), j is the number
    if (str(j) == "27*******5"):
        print(accounts["F"][i], accounts["Number"][i])

出现以下错误:

AttributeError: 'Series' object has no attribute 'iterrows'

我不太明白这个错误,因为“帐户”是一个Pandas Dataframe 。

2uluyalo

2uluyalo1#

accounts["Number"]Series 对象,而不是DataFrame。请迭代accounts.iterrows()并从每行中获取Number列,或者使用Series.iteritems() method
迭代 Dataframe :

for i, row in accounts.iterrows():
    if str(row['Number']) == "27*******5":
        print(row["F"], row["Number"])

或超过Series.iteritems()

for i, number in accounts['Number'].iteritems():
    if str(number) == "27*******5":
        print(accounts["F"][i], number)
xt0899hw

xt0899hw2#

要迭代 Dataframe 列(如accounts['Number'])或panda Series,请使用items(),它会创建一个zip对象。

for i, j in accounts["Number"].items():
#                             ^^^^^^^^^
    if (str(j) == "27*******5"):
        print(accounts["F"][i], accounts["Number"][i])

也就是说,很少需要迭代列,因为有更快的方法来过滤列。例如,对于OP中的情况,使用布尔掩码而不是if子句进行过滤会产生相同的结果:

print(accounts.loc[accounts["Number"].map(str) == "27*******5", ['F', 'Number']])

相关问题