从 str 调用变量

问题描述 投票:0回答:1

我有一个 Excel 电子表格 - 我通过 pandas 读取 - 其中一些值对应于“A + x”; A 是一个已经定义的值,x 是一个 int。 此 Excel 是一个科目列表,每个科目的 A 和 B 都有不同的值。

我在技术上找到了一个解决方案,但想知道是否有替代解决方案来替代我所做的。 Excel 文件很大,我想要一个不需要编写数百行的解决方案

身份证 A B
01 5 A+2
02 8 A+4

因此,类似“A + 2”的内容将在我从 pd.read_excel 获得的 pandas DataFrame 中列为 str。

我想要的是制作一个包含 10 个条目的 DataFrame,其中每个条目都是随机选择的 ID 01 或 ID 02。

假设我选择第一行,在读取 B 之前定义了 A = 5。 我想通过读取 pandas 中的相应条目来获得 B = 7。 这通常可以通过 DF.iloc[0,1] 获得。 但是,A + 2 是 str,我不能。

我找到了两个有效的解决方案:

  1. 在 iloc 之前使用 eval() 函数。这有效。然而,eval() 就是这样,我放弃了这个选择。
  2. 使用 locals() 和如下函数:
def numeric(equation):
   A = DF.iloc[0,0]
   if '+' in equation:
      x = equation.split('+')
      y = locals()[x[0]]+int(x[1])
      return y

然后使用 numeric(DF.iloc[0,1])。

python pandas string variables call
1个回答
0
投票

如果第

A
列中
B
的值是来自第
A
列的值,则可以使用“+”分隔符将行拆分为列表并获取最后一个元素。 将列
A, C
的类型转换为 'int64' 类型。 然后执行将两列的值相加的操作,覆盖列
C

或者只在B列中写入加法的值并执行加法运算A + B。

import pandas as pd


df = pd.DataFrame({'ID': ['01', '02'], 'A': [5, 8], 'B': ['A+2', 'A+4']})
df['C'] = df['B'].str.split('+').str[1]

df = df.astype({'A': 'int64', 'C': 'int64'})

df['C'] = df['A'] + df['C']
© www.soinside.com 2019 - 2024. All rights reserved.