gpt4 book ai didi

python - Pandas 查询()方法中的错误?

转载 作者:太空狗 更新时间:2023-10-30 02:10:38 24 4
gpt4 key购买 nike

我正在试验 pandas query() 方法的几个用例,并尝试了一个抛出异常的参数,但对我的 DataFrame 中的数据造成了不必要的修改。

In [549]: syn_fmax_sort
Out[549]:
build_number name fmax
0 390 adpcm 143.45
1 390 aes 309.60
2 390 dfadd 241.02
3 390 dfdiv 10.80
....
211 413 dfmul 215.98
212 413 dfsin 11.94
213 413 gsm 194.70
214 413 jpeg 197.75
215 413 mips 202.39
216 413 mpeg2 291.29
217 413 sha 243.19

[218 rows x 3 columns]

所以我想使用 query()只取出包含所有 build_number 的此数据框的一个子集的 392,所以我尝试了:

In [550]: syn_fmax_sort.query('build_number = 392')

那抛出一个 ValueError: cannot label index with a null key异常,但不仅如此,它还向我返回了完整的数据帧,并导致所有 build_number设置为 392:

In [551]: syn_fmax_sort
Out[551]:
build_number name fmax
0 392 adpcm 143.45
1 392 aes 309.60
2 392 dfadd 241.02
3 392 dfdiv 10.80
....
211 392 dfmul 215.98
212 392 dfsin 11.94
213 392 gsm 194.70
214 392 jpeg 197.75
215 392 mips 202.39
216 392 mpeg2 291.29
217 392 sha 243.19

[218 rows x 3 columns]

但是,如果我使用 syn_fmax_sort.query('391 < build_number < 393'),我已经弄清楚如何只获取值 392| , 有效/

所以我的问题是:由于 query() 中的错误,我在上面错误地查询数据帧时观察到的行为是什么?方法?

最佳答案

看起来你有错字,你可能想使用 == 而不是 =,一个简单的例子显示了同样的问题:

In [286]:

df = pd.DataFrame({'a':np.arange(5)})
df
Out[286]:
a
0 0
1 1
2 2
3 3
4 4
In [287]:

df.query('a = 3')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-287-41cfa0572737> in <module>()
----> 1 df.query('a = 3')

C:\WinPython-64bit-3.4.2.4\python-3.4.2.amd64\lib\site-packages\pandas\core\frame.py in query(self, expr, **kwargs)
1923 # when res is multi-dimensional loc raises, but this is sometimes a
1924 # valid query
-> 1925 return self[res]
1926
1927 def eval(self, expr, **kwargs):

C:\WinPython-64bit-3.4.2.4\python-3.4.2.amd64\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
1778 return self._getitem_multilevel(key)
1779 else:
-> 1780 return self._getitem_column(key)
1781
1782 def _getitem_column(self, key):

C:\WinPython-64bit-3.4.2.4\python-3.4.2.amd64\lib\site-packages\pandas\core\frame.py in _getitem_column(self, key)
1785 # get column
1786 if self.columns.is_unique:
-> 1787 return self._get_item_cache(key)
1788
1789 # duplicate columns & possible reduce dimensionaility

C:\WinPython-64bit-3.4.2.4\python-3.4.2.amd64\lib\site-packages\pandas\core\generic.py in _get_item_cache(self, item)
1066 res = cache.get(item)
1067 if res is None:
-> 1068 values = self._data.get(item)
1069 res = self._box_item_values(item, values)
1070 cache[item] = res

C:\WinPython-64bit-3.4.2.4\python-3.4.2.amd64\lib\site-packages\pandas\core\internals.py in get(self, item, fastpath)
2856 loc = indexer.item()
2857 else:
-> 2858 raise ValueError("cannot label index with a null key")
2859
2860 return self.iget(loc, fastpath=fastpath)

ValueError: cannot label index with a null key

看起来它在内部尝试使用您的查询构建索引,然后检查长度,因为它是 0,所以它引发了 ValueError,它可能应该是 KeyError,我不知道它是如何评估您的查询的,但目前可能不支持将值分配给列的能力。

关于python - Pandas 查询()方法中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28714469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com