数据如图:
怎么在一定条件下修改数据,比如定位c同学,要把c同学大于70分的改为70分,这种至少有两个限定条件的
可以看下都进去的截图
[https://blog.csdn.net/KIKI_ZSH/article/details/122696721?spm=1001.2014.3001.5502]
import openpyxl
import datetime
import pandas as pd
from math import ceil
from openpyxl import load_workbook
filename = r'D:\Program\Blog\data\test_fr.xlsx'
# 使用openpyxl获取所有的sheet名
wb = load_workbook(filename)
'''
因为有多余没用的sheet,并且有用的sheet都含有"月"这个字,所以
列表推导式存入所有的有用sheet
'''
userful_sheet = [sheetname for sheetname in wb.sheetnames if '月' in sheetname]
# 创建一个空列表,以便将所有处理好的数据放入其中
data_all = []
for sheetname2 in userful_sheet:
data = pd.read_excel(filename, sheet_name=sheetname2, header=None)
# 取出为时间里类型的列名
time_col = data.iloc[0,:].tolist()
time_cols = [col for col in time_col if type(col) == datetime.datetime]
print('time_cols: \n',time_cols)
use_col = data.iloc[1,:9].tolist()
use_col.insert(6,'日期')
print("================================\n")
print('use col: \n', use_col)
# 含有两个指定的阶段 就是含有两个:的取出来的值类型为dataframe,不能直接转换为list,所以需要先values
use_value = data.iloc[2:,:6].values.tolist()
print("================================\n")
print('use value: \n', use_value)
use_value2 = data.iloc[2:,6:].values.tolist()
print("================================\n")
print('use value2: n', use_value2)
# 观察use_value2,因为都为3个3个匹配 所以写个函数 将数据切割为3 3 3的列表
def chunk(lst, size):
return list(map(lambda x: lst[x * size: x * size + size],
list(range(0, ceil(len(lst)/size)))))
data1 = []
for i in range(len(use_value)):
data_value = use_value[i]
data2_value = chunk(use_value2[i], 3)
for j in range(len(use_value[0:len(time_cols)])):
time_time = time_cols[j]
data1.append(time_time)
data_value = data_value + data1
data_value = data_value + data2_value[j]
print(data_value)
data_all.append(data_value)
data_value = use_value[i]
data1 = []
print(data_all,'\n')
data_complete = pd.DataFrame(data_all, columns=use_col)
data_complete.to_excel('complete数据.xlsx', index=False)
里面有很多细节的地方,我能想到的都添加了注释,上面是我按照我的理解 解决了这个问题,如果有更好的解决方案,欢迎大家可以提出,如果有建议或者不理解的地方可以留言给我
import pandas as pd
df = pd.DataFrame(
{"name": ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'D'],
"course": ['01', '02', '03', '01', '02', '01', '02', '03', '02'],
"score": [80, 90, 63, 75, 91, 85, 89, 80, 76],
},
)
print(df)
print('******************方式一:通过& 连接两个筛选条件,直接赋值修改为70分')
df.loc[(df['name'] == 'C') & (df['score'] > 70), 'score'] = 70
print(df)
print('******************方式二:通过apply修改为85分')
df = df.apply(lambda x: 85 if x['name'] == "C" and x['score'] >= 70 else x, axis=1)
print(df)
有帮助的话,请点采纳该答案~