Python3 pandas loc matching,它不被识别.(密钥错误)



有df,

Remarks  Unnamed: 13  Unnamed: 14                 Unnamed: 15  
0   ttttttt            3        3.333  =10000/(10000-(h2+i2)*100)   
1   ttttttt            3        3.300                               
2   ttttttt            3        3.333   

和夸格斯

kwargs = {'Unnamed: 13': '3',
'Unnamed: 15': ''}

这没有问题。

print(df[(df["Unnamed: 13"] == "3") & (df["Unnamed: 15"] == "")])

和结果

Remarks  Unnamed: 13  Unnamed: 14 Unnamed: 15                       _id  
1   ttttttt            3        3.300              5ae21c969268ff4118df7f8b   
2   ttttttt            3        3.333              5ae21c969268ff4118df7f8c   

我做了这个表情。

find_key_and_val =str(' & '.join(["(df["+"""+key+""" + "] == " + """ + val + "")" for key, val in kwargs.items()]))

打印(find_key_and_val(

(df["Unnamed: 13"] == "3") & (df["Unnamed: 15"] == "")

然后我应用了它。

print(df[find_key_and_val])

这将导致以下错误:

Traceback (most recent call last):
File "C:UserstlsdyAppDataLocalProgramsPythonPython36libsite-packagespandascoreindexesbase.py", line 2525, in get_loc
return self._engine.get_loc(key)
File "pandas_libsindex.pyx", line 117, in pandas._libs.index.IndexEngine.get_loc
File "pandas_libsindex.pyx", line 139, in pandas._libs.index.IndexEngine.get_loc
File "pandas_libshashtable_class_helper.pxi", line 1265, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas_libshashtable_class_helper.pxi", line 1273, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: '(df["Unnamed: 13"] == "3") & (df["Unnamed: 15"] == "")'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:/python_project_ab/amazon/property.py", line 201, in <module>
print(df[find_key_and_val])
File "C:UserstlsdyAppDataLocalProgramsPythonPython36libsite-packagespandascoreframe.py", line 2139, in __getitem__
return self._getitem_column(key)
File "C:UserstlsdyAppDataLocalProgramsPythonPython36libsite-packagespandascoreframe.py", line 2146, in _getitem_column
return self._get_item_cache(key)
File "C:UserstlsdyAppDataLocalProgramsPythonPython36libsite-packagespandascoregeneric.py", line 1842, in _get_item_cache
values = self._data.get(item)
File "C:UserstlsdyAppDataLocalProgramsPythonPython36libsite-packagespandascoreinternals.py", line 3843, in get
loc = self.items.get_loc(item)
File "C:UserstlsdyAppDataLocalProgramsPythonPython36libsite-packagespandascoreindexesbase.py", line 2527, in get_loc
return self._engine.get_loc(self._maybe_cast_indexer(key))
File "pandas_libsindex.pyx", line 117, in pandas._libs.index.IndexEngine.get_loc
File "pandas_libsindex.pyx", line 139, in pandas._libs.index.IndexEngine.get_loc
File "pandas_libshashtable_class_helper.pxi", line 1265, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas_libshashtable_class_helper.pxi", line 1273, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: '(df["Unnamed: 13"] == "3") & (df["Unnamed: 15"] == "")'

KeyError: '(df["Unnamed: 13"] == ">

3"( & (df["Unnamed: 15"] == "('

我该怎么办?

你试图让 Pandas 执行一个涉及一系列数据帧切片的复杂操作,但你给它的东西实际上只是一串字符。

此表达式是对数据帧的一系列切片操作:

print(df[(df["Unnamed: 13"] == "3") & (df["Unnamed: 15"] == "")])

虽然这个表达式是一堆字符:

str(' & '.join(["(df["+"""+key+""" + "] == " + """ + val + "")" for key, val in kwargs.items()]))

您的数据帧实际上是在查找标签为"(df["Unnamed: 13"] == "3"( & (df["Unnamed: 15"] == "("的键,该键不存在。 编译器不会遇到这个中间程序并认为"哦,他的意思是这是他想要执行的代码"。 它只是将其视为一个字符串,就像其他任何字符串一样。

如果要将字符串作为命令执行,可以使用 eval(( 方法。 例如:

import pandas as pd
data = [
['ttttttt', 3, 3.333, 10.0],
['ttttttt', 3, 3.300, ""],
['ttttttt', 3, 3.333, ""],
]
df = pd.DataFrame(data, columns=['Remarks', 'Unnamed: 13', 'Unnamed: 14', 'Unnamed: 15'])
string_query = """df[(df['Unnamed: 13'] == 3) & (df["Unnamed: 15"] == "")]"""
print(eval(string_query))

输出:

Remarks  Unnamed: 13  Unnamed: 14 Unnamed: 15
1  ttttttt            3        3.300            
2  ttttttt            3        3.333            

最新更新