小编Pri*_*ish的帖子

在 pandas eval 中调用 round()、ceiling()、floor()、min()、max()

正如标题所说,有没有办法在 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”,看看是否可以定义自定义函数并调用它们,但它不起作用。

笔记:

  1. 这些函数内部的算术运算是必要的(即求和、乘法、两列的除法)。
  2. 我知道有关使用“eval”函数和采取必要测量的问题。

python eval pandas

5
推荐指数
1
解决办法
4311
查看次数

numpy.nan_to_num - 'nan' 关键字无法识别

当您尝试使用以下代码将 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)

numpy python-3.x

4
推荐指数
1
解决办法
2711
查看次数

Pandas eval - 在列上调用用户定义的函数

正如我的问题所述,我想在运行时调用数据帧的自定义函数。自定义函数的用途是计算两个日期之间的差异(即年龄)、将年份转换为月份、从两列中查找最大最小值等。

到目前为止,我成功地执行了算术运算和一些函数,如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 中进行动态表达式评估

通过 pandas eval 函数使用具有多重赋值的局部变量

将参数传递给 python eval()

python eval pandas

3
推荐指数
1
解决办法
2515
查看次数

Python合并数据框和列表字典字典

数据框如下所示:

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)

python dictionary pandas

2
推荐指数
2
解决办法
110
查看次数

Pandas:pd.to_datetime(x) 无法识别整数日期

在给定的数据框中,

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 块并将它们转换为日期时间格式。

python dataframe python-datetime pandas

0
推荐指数
1
解决办法
62
查看次数