xiaoqu525 发表于 2020-11-26 11:15:52

我想问下如何实现python的pandas操作excel中if函数的实现

本帖最后由 xiaoqu525 于 2020-11-26 11:18 编辑

耗材        初估        精估        总估
木头        10        20        20   =IF(C2="",B2,C2)
石头        10                10   =IF(C3="",B3,C3)
油漆        10        10        10   =IF(C4="",B4,C4)



根据耗材,初估,精估的数据,得到总估的数据,总估的公式是=IF(C2="",B2,C2)

suchocolate 发表于 2020-11-26 11:18:11

图片看不到。
excel中的if是VBA,和pandas操作excel是两回事。

xiaoqu525 发表于 2020-11-26 11:19:16

suchocolate 发表于 2020-11-26 11:18
图片看不到。
excel中的if是VBA,和pandas操作excel是两回事。

我就想问下有没类似if函数的东西......不会写,尴尬

suchocolate 发表于 2020-11-26 11:24:09

本帖最后由 suchocolate 于 2020-11-26 14:21 编辑

xiaoqu525 发表于 2020-11-26 11:19
我就想问下有没类似if函数的东西......不会写,尴尬

看到文字了
这个用panda索引和赋值就行,外头用python的if即可。假如原始数据是这样:import pandas as pd

if __name__ == '__main__':
    df = pd.read_excel('test.xlsx')
    # 打印一下原始值
    print(df)
    print('开始修改...')
    # df['精估'].isnull() 生成一个精估列各行是否为空的bool组成的列表 [ false, true, false]
    for n, v in enumerate(df['精估'].isnull()):
      # 如果为空,那么使用b列的值,pandas编号是1, 3是d列
      if v:
            df.iat = df.iat
      # 如果不空,那么使用c列的值,pandas编号2
      else:
            df.iat = df.iat
    print(df)
或者用openpyxl,直接在相关表格输入公式也可以实现。
from openpyxl import load_workbook


if __name__ == '__main__':
    wb = load_workbook('test.xlsx')
    ws = wb.active
    for n in range(2, 5):
      # 每行公式只是数字有变化
      fml = f'=IF(C{n}="",B{n},C{n})'
      ws = fml
    # 另存一份,方便对比
    wb.save('test2.xlsx')

当然,pandas也可以用写入公式的方式让excel自己计算,但pandas的长处是计算数据,写的话还是用openpyxl比较合适import pandas as pd

if __name__ == '__main__':
    df = pd.read_excel('test.xlsx')
    # 打印一下原始值
    print(df)
    print('开始修改')
    data = []
    for n in range(2, 5):
      fml = f'=IF(C{n}="",B{n},C{n})'
      data.append(fml)
    df['总估'] = data
    print(df)
    df.to_excel('test5.xlsx')

疾风怪盗 发表于 2020-11-27 13:36:36

应该是这个吧?
Where用来根据条件替换行或列中的值。
如果满足条件,保持原来的值,
不满足条件则替换为其他值。
默认替换为NaN,也可以指定特殊值。
用法:
DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=False, raise_on_error=None)
参数作用:
• cond:布尔条件,如果 cond 为真,保持原来的值,否则替换为other
• other:替换的特殊值
• inplace:inplace为真则在原数据上操作,为False则在原数据的copy上操作
• axis:行或列
将df中列value_1里小于5的值替换为0:
df['value_1'].where(df['value_1'] > 5 , 0)
Where是一种掩码操作。
「掩码」(英语:Mask)在计算机学科及数字逻辑中指的是一串二进制数字,通过与目标数字的按位操作,达到屏蔽指定位而实现需求。
页: [1]
查看完整版本: 我想问下如何实现python的pandas操作excel中if函数的实现