moi*_*ink 6 python dataframe pandas
我发现了pandas DataFrame.query方法,它几乎完全符合我的需要(并实现了我自己的解析器,因为我没有意识到它存在,但实际上我应该使用标准方法).
我希望我的用户能够在配置文件中指定查询.语法看起来很直观,我可以期待我的非程序员(但工程师)用户能够弄明白.
缺少一件事:一种选择数据框中所有内容的方法.有时我的用户想要使用的是每一行,因此他们会将"全部"或其他内容放入该配置选项中.实际上,这将是默认选项.
我尝试了df.query('True'),但这引发了一个KeyError.我尝试了df.query('1')但返回了索引为1的行.空字符串引发了一个ValueError.
我能想到的唯一的事情是1)每次我需要做这种类型的查询(在代码中可能是3或4次)或2)子类DataFrame和重新实现查询,或添加query_with_all方法时放置一个if子句:
import pandas as pd
class MyDataFrame(pd.DataFrame):
def query_with_all(self, query_string):
if query_string.lower() == 'all':
return self
else:
return self.query(query_string)
Run Code Online (Sandbox Code Playgroud)
然后每次使用我自己的班级而不是熊猫队.这是唯一的方法吗?
保持简单,并使用一个函数:
def query_with_all(data_frame, query_string):
if query_string == "all":
return data_frame
return data_frame.query(query_string)
Run Code Online (Sandbox Code Playgroud)
每当您需要使用此类查询时,只需使用数据框和查询字符串调用该函数即可。无需使用任何额外的ifstatements 或 subclass pd.Dataframe。
如果您只能使用df.query,则可以使用全局变量
ALL = slice(None)
df.query('@ALL', engine='python')
Run Code Online (Sandbox Code Playgroud)
如果不允许使用全局变量,并且您的 DataFrame 不是 MultiIndexed,则可以使用
df.query('tuple()')
Run Code Online (Sandbox Code Playgroud)
所有这些都将是属性句柄NaN值。
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |