|
发表于 2020-11-26 11:24:09
|
显示全部楼层
本帖最后由 suchocolate 于 2020-11-26 14:21 编辑
看到文字了
这个用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[n, 3] = df.iat[n, 1]
- # 如果不空,那么使用c列的值,pandas编号2
- else:
- df.iat[n, 3] = df.iat[n, 2]
- 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[f'd{n}'] = 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')
复制代码 |
|