正如标题所说,有没有办法在 pandas eval 中支持 round、ceiling、min、max、floor 函数。
数据框:
import pandas as pd
import numexpr as ne
op_d = {'ID': [1, 2,3],'V':['F','G','H'],'AAA':[0,1,1],'E':[102014,112019,122017] ,'D':['2019/02/04','2019/02/01','2019/01/01'],'DD':['2019-12-01','2016-05-31','2015-02-15'],'CurrentRate':[7.5,2,2],'NoteRate':[2,3,3],'BBB':[0,00,4],'Q1':[2,8,00],'Q2':[3,5,7],'Q3':[5,6,8]}
df = pd.DataFrame(data=op_d)
Run Code Online (Sandbox Code Playgroud)
abs() 和 sqrt() 函数与 pandas eval 一起使用。IE
df.eval('TT = abs(sqrt(Q1+Q2)-Q2)',inplace=True)
df
Run Code Online (Sandbox Code Playgroud)
谁能建议如何访问 eval 中的其余函数?我还尝试了 eval 中的“local_dict”,看看是否可以定义自定义函数并调用它们,但它不起作用。
笔记:
当您尝试使用以下代码将 nan 值替换为自定义数值时,
np.nan_to_num(exp_allowance,nan=9999.99)
Run Code Online (Sandbox Code Playgroud)
它产生以下错误:
typeerror: nan_to_num() got an unexpected keyword argument 'nan'
Run Code Online (Sandbox Code Playgroud) 正如我的问题所述,我想在运行时调用数据帧的自定义函数。自定义函数的用途是计算两个日期之间的差异(即年龄)、将年份转换为月份、从两列中查找最大最小值等。
到目前为止,我成功地执行了算术运算和一些函数,如abs()、sqrt(),但无法让min()-max()工作。工作是,
df.eval('TT = sqrt(Q1)',inplace=True)
df.eval('TT1 = abs(Q1-Q2)',inplace=True)
df.eval('TT2 = (Q1+Q2)*Q3',inplace=True)
Run Code Online (Sandbox Code Playgroud)
以下代码适用于 eval。如何将其与 dataframe eval 一起使用?
def find_max(x,y):
return np.maximum(x,y)
eval('max1')(4,7)
def find_age(date_col1,date_col2):
return 'I know how to calc age but how to call func this with df.eval and assign to new col'
Run Code Online (Sandbox Code Playgroud)
示例数据框:
op_d = {'ID': [1, 2,3],'V':['F','G','H'],'AAA':[0,1,1],'D':['2019/12/04','2019/02/01','2019/01/01'],'DD':['2019-12-01','2016-05-31','2015-02-15'],'CurrentRate':[7.5,2,2],'NoteRate':[2,3,3],'BBB':[0,4,4],'Q1':[2,8,10],'Q2':[3,5,7],'Q3':[5,6,8]}
df = pd.DataFrame(data=op_d)
Run Code Online (Sandbox Code Playgroud)
任何帮助或链接到文档表示赞赏。
我找到但没有解决我的问题的有用链接是:
使用 pd.eval() 在 pandas 中进行动态表达式评估
数据框如下所示:
d = {'ID': [1, 2,3],'V':['F','G','H'],'AAA':[0,1,1],'AA':[0,2,2],'A':[0,3,3],'BBB':[0,4,4]}
df2 = pd.DataFrame(data=d)
Run Code Online (Sandbox Code Playgroud)
和字典看起来像这样:
dct ={1:{'F':[2,3,5],'G':[3,5,6],'H':[6,7,8]},
2:{'F':[1,3,5],'G':[8,5,6],'H':[9,7,8]},
3:{'F':[5,3,5],'G':[4,5,6],'H':[10,7,8]}
}
Run Code Online (Sandbox Code Playgroud)
根据“ID”和“V”的值,我可以访问字典中的列表,即 dct[2]['G']。如何对此应用合并?
简而言之,我想将特定列表作为一行附加到数据框。
预期结果应如下所示:
op_d = {'ID': [1, 2,3],'V':['F','G','H'],'AAA':[0,1,1],'AA':[0,2,2],'A':[0,3,3],'BBB':[0,4,4],'Q1':[2,8,10],'Q2':[3,5,7],'Q3':[5,6,8]}
output_df = pd.DataFrame(data=op_d )
Run Code Online (Sandbox Code Playgroud) 在给定的数据框中,
import pandas as pd
import numexpr as ne
op_d = {'ID': [1, 2,3],'V':['F','G','H'],'AAA':[0,1,1],'E':[20141223,20190201,20170203] ,'D':['2019/02/04','2019/02/01','2019/01/01'],'DD':['2019-12-01','2016-05-31','2015-02-15'],'CurrentRate':[7.5,2,2],'NoteRate':[2,3,3],'BBB':[0,00,4],'Q1':[2,8,00],'Q2':[3,5,7],'Q3':[5,6,8]}
df = pd.DataFrame(data=op_d)
df
Run Code Online (Sandbox Code Playgroud)
如果我这样做pd.to_datetime(df['E']),结果如下:
0 1970-01-01 00:00:00.020141223
1 1970-01-01 00:00:00.020190201
2 1970-01-01 00:00:00.020170203
Name: E, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?如果这是预期的,那么我如何从 Integer 字段中检测日期?我知道如果 dtype 是对象,我可以在列上放置 try except 块并将它们转换为日期时间格式。