gpt4 book ai didi

python - Pandas 'eval' 与 NaN

转载 作者:行者123 更新时间:2023-12-01 08:35:55 24 4
gpt4 key购买 nike

我有一个包含字符串数据的 DataFrame。这些数据需要进行评估并更改为数字。

让我的 df 为:

var_pct var_num
-76*2 14*1000000
-76*2 12*1000000
111*2 29*1000000
47*2 33*1000000
nan 60*1000000

for column in df:
df[column] =df.eval(df[column],inplace=True)

我遇到了“nan”列的问题,其中评估结果的长度小于原始值。如何确保评估后“nan”将是“”?

最佳答案

您应该避免eval。在这种情况下,我建议您首先分成数字系列:

df = df.fillna('NaN*NaN')

for col in df.columns:
df = df.join(df.pop(col).str.split('*', expand=True)\
.apply(pd.to_numeric, errors='coerce')\
.add_prefix(f'{col}_'))

print(df)

var_pct_0 var_pct_1 var_num_0 var_num_1
0 -76.0 2.0 14 1000000
1 -76.0 2.0 12 1000000
2 111.0 2.0 29 1000000
3 47.0 2.0 33 1000000
4 NaN NaN 60 1000000

然后使用矢量化运算执行计算:

for col in ['var_pct', 'var_num']:
df[col] = df[f'{col}_0'] * df[f'{col}_1']
<小时/>

出于学术目的,您尝试的方法可以通过顶级函数 pd.eval 实现。与 applymap 一起。但要注意,这只是一个低效的 Python 级循环。

nan = np.nan
df = df.fillna('nan*nan')

df = df.applymap(lambda x: pd.eval(x))

print(df)

var_pct var_num
0 -152.0 14000000
1 -152.0 12000000
2 222.0 29000000
3 94.0 33000000
4 NaN 60000000

关于python - Pandas 'eval' 与 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53728209/

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