Pandas中使用row.name无法获取DataFrame第一列值的问题咨询
问题原因及解决办法
原因分析
你用iterrows()遍历DataFrame时,得到的row是pandas的Series对象。这个对象自带的.name属性对应的是该行的索引编号,而非你CSV里的name列内容——因为你的列名刚好和Series的内置属性name重名了,所以调用row.name会优先返回索引值,而非列数据。
解决办法
把访问列的方式改成方括号语法,直接指定列名即可:
修正后的遍历写法
import datetime as dt import pandas today = dt.datetime.now() month = today.month day = today.day data = pandas.read_csv("birthdays.csv") for (index, row) in data.iterrows(): if (row.month == month) & (row.day == day): print(row['name']) # 用方括号访问name列
更高效的替代写法(推荐)
pandas不推荐用iterrows()遍历数据集,直接用布尔筛选性能更优:
import datetime as dt import pandas today = dt.datetime.now() month = today.month day = today.day data = pandas.read_csv("birthdays.csv") # 筛选月日与今日匹配的行 matches = data[(data['month'] == month) & (data['day'] == day)] # 输出所有匹配的姓名 for name in matches['name']: print(name) # 也可以直接输出列表形式 # print(matches['name'].tolist())
内容的提问来源于stack exchange,提问作者elyaz98
相关产品推荐
相关产品推荐

