df_temp=df_list

时间: 2024-05-23 14:07:29 浏览: 18
df_temp=df_list,这行代码是将一个名为df_list的数据框(DataFrame)赋值给了另一个名为df_temp的数据框。这样,df_temp和df_list指向同一份数据,任意一方对数据进行了修改,另一方的数据也会相应改变。可以理解为是将df_list的指针指向了df_temp的地址。因此,在修改df_temp时,需要注意是否会对df_list造成影响。
相关问题

请问以下代码有何问题? try: db = pymysql.Connect(host='10.32.158.162', port=3306, user='dscuser', passwd='dscuser_123', db='COST') if y == "岗位费用": df_upload = pd.melt(df_upload, id_vars=['project', 'role'], value_vars=["2023", "2024", "2025", "2026", "2027", "2028", "2029", "上一版"], var_name='year', value_name='value') elif y == "年度项目月份工时": df_upload = pd.melt(df_upload, id_vars=['Project', 'Function'], value_vars=temp, var_name='year', value_name='value') df_upload = df_upload.dropna() df_upload = df_upload.drop_duplicates() df_upload = df_upload[(df_upload['value'] != 0) & (df_upload['value'].notna())] else: sql = "delete from COST.{} where project = '{}';".format(upload_name, project_name) cursor = db.cursor() cursor.execute(sql) # db.commit() # db.close() col_names = list(df_upload) for col in col_names: df_upload[col] = df_upload[col].astype('string', copy=False) df_upload.to_sql(upload_name, engine, if_exists="append", index=False) else: # db.commit() # db.close() error = error msg = "" except Exception as e: db.rollback() msg = str(e)[0:100] else: db.commit() finally: db.close()

这段代码存在一些问题: 1. 引入的库`pandas`和`pymysql`没有看到在哪里导入,需要在代码开头进行导入。 2. 在执行SQL语句时,没有使用参数化查询,容易出现SQL注入漏洞。应该使用参数化查询,例如使用`cursor.execute(sql, params)`方法。其中`params`是一个元组或字典类型,用于替换SQL语句中的参数。 3. 在`try`语句块中,如果`y`不等于"岗位费用"和"年度项目月份工时",则会执行`else`语句块,但是该语句块中没有对`df_upload`进行处理,会导致后面的代码出现错误。 4. 在`else`语句块中,如果使用`cursor`对象进行数据库操作,则应该在操作完成后调用`cursor.close()`方法释放资源。 5. 在`except`语句块中,`error = error`这行代码没有实际作用,应该删除。 下面是修改后的代码: ``` import pandas as pd import pymysql try: db = pymysql.Connect(host='10.32.158.162', port=3306, user='dscuser', passwd='dscuser_123', db='COST') if y == "岗位费用": df_upload = pd.melt(df_upload, id_vars=['project', 'role'], value_vars=["2023", "2024", "2025", "2026", "2027", "2028", "2029", "上一版"], var_name='year', value_name='value') elif y == "年度项目月份工时": df_upload = pd.melt(df_upload, id_vars=['Project', 'Function'], value_vars=temp, var_name='year', value_name='value') df_upload = df_upload.dropna() df_upload = df_upload.drop_duplicates() df_upload = df_upload[(df_upload['value'] != 0) & (df_upload['value'].notna())] else: sql = "delete from COST.{} where project = %s;".format(upload_name) cursor = db.cursor() cursor.execute(sql, (project_name,)) cursor.close() col_names = list(df_upload) for col in col_names: df_upload[col] = df_upload[col].astype('string', copy=False) df_upload.to_sql(upload_name, engine, if_exists="append", index=False) except Exception as e: db.rollback() msg = str(e)[0:100] else: db.commit() finally: db.close() ``` 在上面的代码中,我们首先导入了`pandas`和`pymysql`库。在`try`语句块中,我们首先创建了一个数据库连接`db`,然后根据不同的条件对`df_upload`进行处理。如果`y`等于"岗位费用",则使用`pd.melt()`方法进行数据重构。如果`y`等于"年度项目月份工时",则使用`pd.melt()`方法和`temp`变量进行数据重构。然后对数据进行清洗,去除空值和重复值,以及`value`列中的0值和空值。 如果`y`不等于"岗位费用"和"年度项目月份工时",则执行`else`语句块。在该语句块中,我们使用参数化查询的方式执行SQL语句,避免了SQL注入漏洞。然后将`df_upload`中的数据类型转换为字符串类型,并使用`df_upload.to_sql()`方法将数据写入数据库。 在`except`语句块中,如果出现异常,则会回滚事务并输出错误信息。在`else`语句块中,如果没有出现异常,则会提交事务。最后在`finally`语句块中,关闭数据库连接。

解释下这段代码 第三方商品 __df1 = __temp_df[__temp_df['show_name'] == '第三方商品'] if not __df1.empty: __df1 = __df1.pivot_table(index=['name', 'show_name'], values=['buy_num'], aggfunc=np.sum).reset_index() else: __df1 = __df1[['name', 'show_name', 'buy_num']] # 非第三方商品 __df2 = __temp_df[__temp_df['show_name'] != '第三方商品'] if not __df2.empty: __df2 = __df2.pivot_table(index=['gt_uuid', 'show_name'] ,values=['buy_num'], aggfunc=np.sum).reset_index() __df2 = pd.merge(left=__df2, right=pd.DataFrame(s_gt_rv, columns=['gt_uuid', 'goods_name']), how='left', on='gt_uuid') __df2 = __df2[['goods_name', 'show_name', 'buy_num']] __df2.rename(columns={'goods_name': 'name'}, inplace=True) else: __df2 = __df2[['name', 'show_name', 'buy_num']] __temp_df = pd.concat([__df1, __df2]) del __df1, __df2 __temp_df.rename(columns={'name': 'goods_name', 'show_name': 'gc_name', 'buy_num': 'num'}, inplace=True) __temp_df.sort_values(by='num', ascending=False, inplace=True) return_data['goods']['goods_list'] = __temp_df.to_dict(orient='records') __temp_df = __temp_df[['gc_name', 'num']] __temp_df = __temp_df.pivot_table(index='gc_name', values='num', aggfunc=np.sum).reset_index() __temp_df.sort_values(by='num', ascending=False, inplace=True) return_data['goods']['gc_list'] = __temp_df.to_dict(orient='records') del __temp_df

这段代码是对一个名为 `__temp_df` 的数据框进行处理,并将处理结果存储在 `return_data` 字典的 `goods` 键下。 首先,根据条件 `__temp_df['show_name'] == '第三方商品'`,筛选出满足条件的行,存储在 `__df1` 中。如果 `__df1` 不为空,则对其进行数据透视操作,按照 `name` 和 `show_name` 分组,计算 `buy_num` 的总和,并重置索引。否则,保留 `__df1` 的 `name`、`show_name` 和 `buy_num` 列。 接着,根据条件 `__temp_df['show_name'] != '第三方商品'`,筛选出满足条件的行,存储在 `__df2` 中。如果 `__df2` 不为空,则对其进行数据透视操作,按照 `gt_uuid` 和 `show_name` 分组,计算 `buy_num` 的总和,并重置索引。然后,将 `__df2` 与一个包含列名为 `['gt_uuid', 'goods_name']` 的 DataFrame 进行左连接,并将结果存储在 `__df2` 中。最后,保留 `__df2` 的 `goods_name`、`show_name` 和 `buy_num` 列,并将列名 `goods_name` 改为 `name`。 接下来,通过合并 `__df1` 和 `__df2` 构成新的数据框 `__temp_df`。之后,删除 `__df1` 和 `__df2` 变量。 然后,对 `__temp_df` 进行列名的重命名,将 `name` 改为 `goods_name`,`show_name` 改为 `gc_name`,`buy_num` 改为 `num`。将 `__temp_df` 按照 `num` 降序排序。 接着,将 `__temp_df` 转换为字典格式,并将结果存储在 `return_data` 字典的 `goods_list` 键下。再次对 `__temp_df` 进行处理,只保留 `gc_name` 和 `num` 两列,并进行数据透视操作,按照 `gc_name` 分组,计算 `num` 的总和,并重置索引。最后,将结果按照 `num` 降序排序。 最后,将处理后的 `__temp_df` 转换为字典格式,并将结果存储在 `return_data` 字典的 `gc_list` 键下。最后,删除 `__temp_df` 变量。

相关推荐

def df_of_positive(positive_temp): date=[]; place=[]; people=[]; time=[]; people_num=[]; delttime=[]; people_total=[]; for i in range(3): filename=qianfu[i] print("今天日期是:",filename) filename = file+'\\'+filename+'.csy'; try: scanning_code = pd.read_csv(filename,encoding='gbk') #7开这一天的数据 except: print(filename,'is not found.') place_temp=(scanning_code['user_id']==positive_temp['人品_ID']) time_positive = scanning_code[place_temp]['create_time'] id_of_been_to = np.array(scanning_code[place_temp]['grid_point_id']) # 去过的所有场所所有ID for j in range(len(id_of_been_to)): grid_temp =id_of_been_to[j] people_temp = scanning_code[scanning_code['grid_point_id']==grid_temp]['user_id'] #找到这一天同一地点的人群 time_temp = scanning_code[scanning_code['grid_point_id']==grid_temp]['create_time'] index_delt_less_than_30min=[] delt_=[]; for k in range(len(time_temp)): delt= delt_time(time_positive.iloc[j])-delt_time(time_temp.iloc[k]) #计算时间差 if np.abs(delt)<=30: index_delt_less_than_30min.append(k) delt_.append(time_temp.iloc[k].split(" ")[1]) df_temp=(scanning_code[scanning_code['grid_point_id']==grid_temp]).iloc[index_delt_less_than_30min] people_num.append(len(df_temp)) people.append(list(df_temp['user_id'])) place.append(grid_temp) date.append(qianfu[i]) delttime.append(delt_) time.append(time_positive.iloc[j].split(" ")[l]) people_total.append(len(people_temp)) df = pd.DataFrame({'日期':date,'阳者经过时间':time,'地点':place,'经过总人数':people_total,'密接者':people,'密接者时间':delttime,'密接人数':people_num}) return df

import tushare as ts import datetime # 设置 token,用于认证 ts.set_token('530fbc2b682d65696dbeec010a893f70d6953fbb6842151003c3e12f') # 初始化 tushare pro = ts.pro_api() df = pro.daily(fields = 'ts_code,trade_date,open,close',start_date='20180701', end_date='20180718') def get_stock_poll(df): stock_pool=[] for code in df['ts_code'].unique(): temp_df = df[df['ts_code'] == code ] for i in range(len(temp_df)-3): if (temp_df.iloc[i + 3]['close'] > temp_df.iloc[i + 2]['close']) and \ (temp_df.iloc[i + 2]['close'] > temp_df.iloc[i + 2]['open']) and \ (temp_df.iloc[i + 1]['close'] > temp_df.iloc[i + 1]['open']) and \ (temp_df.iloc[i]['close'] > temp_df.iloc[i]['open'])and \ (temp_df.iloc[i + 3]['close'] > temp_df.iloc[i + 2]['close'])and \ (temp_df.iloc[i + 2]['close'] > temp_df.iloc[i + 1]['close']) and\ (temp_df.iloc[i + 1]['close'] > temp_df.iloc[i]['close']): stock_pool.append(code) break return stock_pool def buy_stock(stock_pool,df): buy_list = [] for code in stock_pool: temp_df = df[df['ts_code']==code] for i in range(len(temp_df-2)): if(temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 2]['open']) and \ (temp_df.iloc[i + 1]['close'] < temp_df.iloc[i + 1]['open']) and \ (temp_df.iloc[i]['close'] < temp_df.iloc[i]['open'])and \ (temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 1]['close'])and \ (temp_df.iloc[i + 1]['close'] < temp_df.iloc[i]['close']): buy_list.append(code) break return buy_list def sell_stock(buy_stock,df): sell_list = [] for stock in buy_list: buy_date=dateime.datetime.strptime(stock[1],"%Y-%m-%d") current_date = datetime.datetime.today() days_held = (current_date - buy_date).days if days_held >=3: sell_list.append(stock[0]) print("sell list:",sell_list)要求上述代码在聚宽上运行

最新推荐

recommend-type

(2024)跳槽涨薪必备精选面试题.pdf

(2024)跳槽涨薪必备精选面试题.pdf (2024)跳槽涨薪必备精选面试题.pdf (2024)跳槽涨薪必备精选面试题.pdf (2024)跳槽涨薪必备精选面试题.pdf (2024)跳槽涨薪必备精选面试题.pdf
recommend-type

应用服务器和部分网络安全设备技术参数.doc

服务器
recommend-type

html网页版python语言pytorch框架训练识别是否疲劳-含逐行注释和说明文档-不含图片数据集

本代码是基于python pytorch环境安装的cnn深度学习代码。 下载本代码后,有个环境安装的requirement.txt文本 运行环境推荐安装anaconda,然后再里面推荐安装python3.7或3.8的版本,pytorch推荐安装1.7.1或1.8.1版本。 首先是代码的整体介绍 总共是3个py文件,十分的简便 且代码里面的每一行都是含有中文注释的,小白也能看懂代码 然后是关于数据集的介绍。 本代码是不含数据集图片的,下载本代码后需要自行搜集图片放到对应的文件夹下即可 在数据集文件夹下是我们的各个类别,这个类别不是固定的,可自行创建文件夹增加分类数据集 需要我们往每个文件夹下搜集来图片放到对应文件夹下,每个对应的文件夹里面也有一张提示图,提示图片放的位置 然后我们需要将搜集来的图片,直接放到对应的文件夹下,就可以对代码进行训练了。 运行01数据集文本生成制作.py,是将数据集文件夹下的图片路径和对应的标签生成txt格式,划分了训练集和验证集 运行02深度学习模型训练.py,会自动读取txt文本内的内容进行训练 运行03html_server.py,生成网页的url了 打开
recommend-type

模板022.pptx

论文答辩ppt模板
recommend-type

模板015.pptx

商业计划书ppt模板
recommend-type

VMP技术解析:Handle块优化与壳模板初始化

"这篇学习笔记主要探讨了VMP(Virtual Machine Protect,虚拟机保护)技术在Handle块优化和壳模板初始化方面的应用。作者参考了看雪论坛上的多个资源,包括关于VMP还原、汇编指令的OpCode快速入门以及X86指令编码内幕的相关文章,深入理解VMP的工作原理和技巧。" 在VMP技术中,Handle块是虚拟机执行的关键部分,它包含了用于执行被保护程序的指令序列。在本篇笔记中,作者详细介绍了Handle块的优化过程,包括如何删除不使用的代码段以及如何通过指令变形和等价替换来提高壳模板的安全性。例如,常见的指令优化可能将`jmp`指令替换为`push+retn`或者`lea+jmp`,或者将`lodsbyteptrds:[esi]`优化为`moval,[esi]+addesi,1`等,这些变换旨在混淆原始代码,增加反逆向工程的难度。 在壳模板初始化阶段,作者提到了1.10和1.21两个版本的区别,其中1.21版本增加了`Encodingofap-code`保护,增强了加密效果。在未加密时,代码可能呈现出特定的模式,而加密后,这些模式会被混淆,使分析更加困难。 笔记中还提到,VMP会使用一个名为`ESIResults`的数组来标记Handle块中的指令是否被使用,值为0表示未使用,1表示使用。这为删除不必要的代码提供了依据。此外,通过循环遍历特定的Handle块,并依据某种规律(如`v227&0xFFFFFF00==0xFACE0000`)进行匹配,可以找到需要处理的指令,如`push0xFACE0002`和`movedi,0xFACE0003`,然后将其替换为安全的重定位值或虚拟机上下文。 在结构体使用方面,笔记指出壳模板和用户代码都会通过`Vmp_AllDisassembly`函数进行解析,而且0x8和0x10字段通常都指向相同的结构体。作者还提到了根据`pNtHeader_OptionalHeader.Magic`筛选`ESI_Matching_Array`数组的步骤,这可能是为了进一步确定虚拟机上下文的设置。 这篇笔记深入解析了VMP技术在代码保护中的应用,涉及汇编指令的优化、Handle块的处理以及壳模板的初始化,对于理解反逆向工程技术以及软件保护策略有着重要的参考价值。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【进阶】音频处理基础:使用Librosa

![【进阶】音频处理基础:使用Librosa](https://picx.zhimg.com/80/v2-a39e5c9bff1d920097341591ca8a2dfe_1440w.webp?source=1def8aca) # 2.1 Librosa库的安装和导入 Librosa库是一个用于音频处理的Python库。要安装Librosa库,请在命令行中输入以下命令: ``` pip install librosa ``` 安装完成后,可以通过以下方式导入Librosa库: ```python import librosa ``` 导入Librosa库后,就可以使用其提供的各种函数
recommend-type

python中字典转换成json

在Python中,你可以使用`json`模块将字典转换为JSON格式的字符串。下面是一个简单的示例: ```python import json # 假设我们有一个字典 dict_data = { "name": "John", "age": 30, "city": "New York" } # 使用json.dumps()函数将字典转换为JSON json_string = json.dumps(dict_data) print(json_string) # 输出:{"name": "John", "age": 30, "city": "New York"}
recommend-type

C++ Primer 第四版更新:现代编程风格与标准库

"Cpp Primer第四版中文版(电子版)1" 本书《Cpp Primer》第四版是一本深入浅出介绍C++编程语言的教程,旨在帮助初学者和有经验的程序员掌握现代C++编程技巧。作者在这一版中进行了重大更新,以适应C++语言的发展趋势,特别是强调使用标准库来提高编程效率。书中不再过于关注底层编程技术,而是将重点放在了标准库的运用上。 第四版的主要改动包括: 1. 内容重组:为了反映现代C++编程的最佳实践,书中对语言主题的顺序进行了调整,使得学习路径更加顺畅。 2. 添加辅助学习工具:每章增设了“小结”和“术语”部分,帮助读者回顾和巩固关键概念。此外,重要术语以黑体突出,已熟悉的术语以楷体呈现,以便读者识别。 3. 特殊标注:用特定版式标注关键信息,提醒读者注意语言特性,避免常见错误,强调良好编程习惯,同时提供通用的使用技巧。 4. 前后交叉引用:增加引用以帮助读者理解概念之间的联系。 5. 额外讨论和解释:针对复杂概念和初学者常遇到的问题,进行深入解析。 6. 大量示例:提供丰富的代码示例,所有源代码都可以在线获取,便于读者实践和学习。 本书保留了前几版的核心特色,即以实例教学,通过解释和展示语言特性来帮助读者掌握C++。作者的目标是创作一本清晰、全面、准确的教程,让读者在编写程序的过程中学习C++,同时也展示了如何有效地利用这门语言。 《Cpp Primer》第四版不仅适合C++初学者,也适合想要更新C++知识的老手,它全面覆盖了C++语言的各个方面,包括基础语法、类、模板、STL(Standard Template Library)等,同时引入了现代C++的特性,如智能指针、RAII(Resource Acquisition Is Initialization)、lambda表达式等,使读者能够跟上C++语言的发展步伐,提升编程技能。