【发布时间】:2018-01-04 10:27:12
【问题描述】:
我看到了有关此问题的 stack over flow 帖子,但没有任何内容符合我的要求,因此我正在创建此帖子。我正在使用python 3.6。我有一个数据框 df_student。示例数据如下图所示
我正在尝试使用以下代码过滤数据框
df_filter1=df_student.loc[(df_student['year'] == x & (df_student['Grade']==y) & (df_student['Mail']==z)]
x,y & z 是从代码生成的,抱歉我不能分享代码。但运行后我收到错误消息
ValueError: Can only compare identically-labeled Series objects
检查后,我发现 x、y、z 是作为单个值“系列”对象生成的。x、y 和 z 在我的数据框年份中也是 str 类型,为 int64 类型,等级和邮件是“O”类型.所以我修改了代码并使用了以下代码
df_filter1=df_student.loc[(df_student['year'] == int(x.values[0]) & (df_student['Grade']==y.values[0]) & (df_student['Mail']==z.values[0])]
现在,我没有收到任何错误消息,但 df_filter1 显示为一个空数据框,其中应该有一些行。请建议我需要做什么修改
我已经按照以下修改 耶兹瑞尔的建议
df_filter1=df_student.loc[(df_student['year'] == x.astype(int).iat[0]) &
(df_student['Grade']==y.iat[0]) &
(df_student['Mail']==z.iat[0])]
但收到错误消息
AttributeError: 'int' object has no attribute 'astype'
我已按照 jezrael 的建议修改了代码,并再次从我的 csv 文件中重新加载了数据,并在下次运行时遇到了这些错误
File "<ipython-input-69-6c2be16ee93f>", line 6, in studQuery
df_filter1=df_student.loc[(df_student['year'] == x) & (df_student['Grade']==y.iat[0]) & (df_student['Mail']==z.iat[0])]
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", line 1964, in __getitem__
return self._getitem_column(key)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", line 1971, in _getitem_column
return self._get_item_cache(key)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 1645, in _get_item_cache
values = self._data.get(item)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals.py", line 3590, in get
loc = self.items.get_loc(item)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2444, in get_loc
return self._engine.get_loc(self._maybe_cast_indexer(key))
File "pandas\_libs\index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 154, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\hashtable_class_helper.pxi", line 1210, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas\_libs\hashtable_class_helper.pxi", line 1218, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'year'
【问题讨论】: