Excel 公式转换为 Python 3

Posted

技术标签:

【中文标题】Excel 公式转换为 Python 3【英文标题】:Excel formula translation to Python 3 【发布时间】:2020-08-04 09:36:16 【问题描述】:

我无法将以下 excel 公式转换为 Python 3 代码:

=IF(B1="";A1&D1;A1&VLOOKUP(B1;table_2!table_2_col_A:table_2_col_B;2;FALSE))

我尝试了以下方法,但它不会产生与原始 excel 文件列中相同的结果:

excel_df['new_col)'] = ''

for i, j, k in zip(excel_df['B'], 
                   excel_df['A'], 
                   excel_df['D']):

    for v, x in zip(table_2['A'], 
                    table_2['B']):

        if not pd.isnull(i):

            if i in v:

                excel_df.at[i, 'new_col'] = j + x

        elif pd.isnull(i):

            excel_df.at[i, 'new_col'] = j + k

很抱歉,我无法生成示例数据供您尝试,也无法在此处分享原始数据。如果您能提供任何指示或更正以更好地将这个 excel 公式适应 python,我将不胜感激。

非常感谢您

【问题讨论】:

除非您提供一些示例数据和预期的输出,否则这可能不会收到有用的答案。示例数据不一定是您的实际数据,但可以组成以代表您的问题。 使用np.where -- np.where(conditional,true-value,false-value) 如果你正在做一个vlookup,那么你就需要做一个合并。但正如 Erfan 所说,只需为您的两个表各放几行即可。 嗨@Datanovice,您能否提供一个使用您建议的架构的示例骨架代码? 很高兴只要您提供一些模拟您的问题的数据。 我真的很抱歉,但我不能。我正在使用具有大量不同案例的大型 excel 文件,我需要大量时间来浏览所有数据并提供最小的可重现示例。您的答案不需要 100% 正确,如果它只是为我指明正确的方向,我会很高兴 【参考方案1】:

这可能是您正在寻找的:

tbl2 = table_2[['col_A','col_B']]

## df has columns A,B,D
df = df.merge(tbl2,left_on=['B'],right_on=['col_A'],how='left')
# df['col_B'] = df['col_B'].fillna(0)
df['result'] = np.where(df['B']=='',df['A']*df['D'],df['A']*df['col_B'])

【讨论】:

谢谢!!够用!! :)【参考方案2】:

假设您的表格如下所示:

>>> df 

    A    B   C   D
0  A0   B0  C0  D0
1  A1   B1  C1  D1
2  A2   B2  C2  D2
3  A3  NaN  C3  D3
4  A4   B4  C4  D4
5  A5   B5  C5  D5
6  A6  NaN  C6  D6
7  A7  NaN  C7  D7
8  A8  NaN  C8  D8
9  A9  NaN  C9  D9

>>> table_2

      A    B
0   B20  x20
1   B19  x19
2   B18  x18
3   B17  x17
4   B16  x16
5   B15  x15
6   B14  x14
7   B13  x13
8   B12  x12
9   B11  x11
10  B10  x10
11   B9   x9
12   B8   x8
13   B7   x7
14   B6   x6
15   B5   x5
16   B4   x4
17   B3   x3
18   B2   x2
19   B1   x1

这是一种方法:

# Prepare table_2 into a "look up" table of sort
>>> table_2 = table_2.set_index('A')

# Formula translation
>>> df = df.assign(result=df.apply(lambda x: (x['A'] + x['D']) if pd.isna(x['B']) else table_2['B'].get(x['B']), axis=1))

结果:

>>> df
    A    B   C   D result
0  A0   B0  C0  D0   None
1  A1   B1  C1  D1     x1
2  A2   B2  C2  D2     x2
3  A3  NaN  C3  D3   A3D3
4  A4   B4  C4  D4     x4
5  A5   B5  C5  D5     x5
6  A6  NaN  C6  D6   A6D6
7  A7  NaN  C7  D7   A7D7
8  A8  NaN  C8  D8   A8D8
9  A9  NaN  C9  D9   A9D9

使用apply 并不完全是理想的解决方案,但它为您提供了一些处理条件的灵活性。

【讨论】:

以上是关于Excel 公式转换为 Python 3的主要内容,如果未能解决你的问题,请参考以下文章

excel进制转换 excel常用的进制转化操作过程

如何在excel中把日期转换成纯数字

excel如何把时间段转换为分钟或小时数

怎么将MATHTYPE中的公式转换为WORD中自带的公式?

从excel文件中删除公式并将其转换为R公式

怎么将MATHTYPE中的公式转换为WORD中自带的公式