pandas问题,如何条件修改数据

数据如图:
怎么在一定条件下修改数据,比如定位c同学,要把c同学大于70分的改为70分,这种至少有两个限定条件的

img

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7445996
  • 这篇博客也不错, 你可以看下pandas连接数据库,从数据库读取数据,将数据保存到数据库
  • 除此之外, 这篇博客: pandas处理多行多列转置问题中的 这里需要注意的是因为有合并单元格的列,所以需要进行处理下,详细的处理方式请参照 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 可以看下都进去的截图
    在这里插入图片描述

    [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,因为都为33个匹配 所以写个函数 将数据切割为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)				
    

    里面有很多细节的地方,我能想到的都添加了注释,上面是我按照我的理解 解决了这个问题,如果有更好的解决方案,欢迎大家可以提出,如果有建议或者不理解的地方可以留言给我

  • 您还可以看一下 关东升老师的Python数据分析与科学计算基础篇:Pandas图解,使抽象的数据具象为可触摸的图形课程中的 获取贵州茅台股票历史数据小节, 巩固相关知识点
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)

有帮助的话,请点采纳该答案~