pandas 根据前几列,来新增一列

本文展示如何使用Python的Pandas库处理包含城市、年份和人口数据的表格,通过定义函数并应用到DataFrame上,为每行数据添加测试列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import numpy as np
import pandas as pd
 
data = {'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'],
       'year': [2016,2016,2015,2017,2016, 2016],
       'population': [2100, 2300, 1000, 700, 500, 500]}
frame = pd.DataFrame(data, columns = ['year', 'city', 'population', 'debt'])
 
def function(a, b):
    if 'ing' in a and b == 2016:
        return 1
    else:
        return 0
print(frame, '\n')
frame['test'] = frame.apply(lambda x: function(x.city, x.year), axis = 1)
print(frame)

大家要注意的是x.city和x.year的调用

<think>根据用户需求,我们需要完成以下任务: 1. 合并文件夹中的多个Excel文件 2. 添加固定内容(例如:新增一列,该列的值固定为某个常量) 3. 新增列(可能包括从现有数据中提取特定信息生成新列) 4. 提取数据列(可能指从现有列中提取信息生成新的一列) 步骤: 1. 导入必要的库:pandas, os, glob 2. 指定包含Excel文件的文件夹路径 3. 读取所有Excel文件(假设都是.xlsx格式) 4. 遍历每个文件,读取为DataFrame,然后进行所需处理: a. 添加固定内容:例如,新增一列“来源”,值为文件名 b. 新增列:根据需求,可能从现有列中计算得到 c. 提取数据列:例如,从某一列中提取部分信息形成新列 5. 将所有处理后的DataFrame合并成一个大的DataFrame 6. 将合并后的DataFrame写入新的Excel文件 注意:用户提到“添加固定内容”,这里可以理解为每个文件添加一列固定值(比如一个常量字符串或数字),或者为每个文件添加一个标识(比如文件名)。同时,用户还要求“新增列”和“提取数据列”,这需要根据具体的数据结构来操作。由于用户没有给出具体的数据结构,我们假设需要从某一列中提取信息生成新列(例如,从“日期”列提取年份作为新列“年份”)。如果用户有更复杂的需求,可能需要使用正则表达式或字符串处理函数。 为了通用性,我们将: - 添加一列“来源”,值为文件名 - 新增一列“新列1”,值为固定字符串(例如“固定内容”) - 再新增一列“提取列”,通过从现有列(比如“原列”)中提取信息得到(例如,提取原列的两个字符) 用户可以根据实际需求修改提取规则。 代码结构如下: 1. 设置文件夹路径和输出文件路径 2. 获取所有Excel文件列表 3. 创建一个空列表用于存储所有DataFrame 4. 循环读取每个文件: a. 读取为DataFrame b. 添加列“来源” = 文件名 c. 添加列“新列1” = "固定内容" (这里用固定字符串,也可以根据需求修改) d. 添加列“提取列” = 对指定列进行提取操作(例如:df['原列'].str[:2]) 5. 合并所有DataFrame 6. 输出到新的Excel文件 注意:由于不同Excel文件可能有不同的列,合并时使用pd.concat,注意设置ignore_index=True。 下面给出示例代码:</think>### Python合并多个Excel文件并添加固定内容、新增列和提取数据列 下面我将详细介绍如何使用Python合并多个Excel文件,并实现添加固定内容、新增列以及从现有数据提取信息生成新列的功能。 #### 解决方案步骤: ```python import pandas as pd import os import glob # 1. 设置文件夹路径和输出文件名 folder_path = 'excel文件夹路径/' # 替换为实际文件夹路径 output_file = '合并结果.xlsx' # 输出文件名 # 2. 获取所有Excel文件列表 excel_files = glob.glob(os.path.join(folder_path, '*.xlsx')) # 3. 创建空列表存储所有DataFrame all_dfs = [] # 4. 遍历处理每个文件 for file in excel_files: # 读取Excel文件 df = pd.read_excel(file) # 添加固定内容列 (示例: 添加文件来源) df['文件来源'] = os.path.basename(file) # 添加固定值列 (示例: 添加状态列) df['状态'] = '已处理' # 新增计算列 (示例: 从现有列计算新值) # 假设有'销售额'和'成本'列,计算利润 if '销售额' in df.columns and '成本' in df.columns: df['利润'] = df['销售额'] - df['成本'] # 提取数据生成新列 (示例: 从日期列提取年份) if '日期' in df.columns: df['年份'] = pd.to_datetime(df['日期']).dt.year # 添加到列表 all_dfs.append(df) # 5. 合并所有DataFrame merged_df = pd.concat(all_dfs, ignore_index=True) # 6. 保存结果 merged_df.to_excel(output_file, index=False) print(f'合并完成! 共处理 {len(excel_files)} 个文件,保存至: {output_file}') ``` #### 关键功能说明: 1. **添加固定内容**: - `df['文件来源']` 列记录原始文件名 - `df['状态']` 列添加固定文本值"已处理" 2. **新增列**: - 使用标准列计算创建新列(如`利润 = 销售额 - 成本`) - 支持条件检查,避免因列不存在而报错 3. **提取数据生成新列**: - 从日期字段提取年份(使用`pd.to_datetime().dt.year`) - 可扩展其他提取逻辑(如字符串处理、正则匹配等) 4. **合并处理**: - 自动处理不同文件的结构差异 - `ignore_index=True` 重建连续索引 #### 自定义修改指南: 1. **修改固定内容**: ```python # 修改固定值 df['新列名'] = '你的固定内容' # 添加当日期 df['处理日期'] = pd.Timestamp.today().date() ``` 2. **自定义提取逻辑**: ```python # 示例:从产品编号提取分类代码 if '产品编号' in df.columns: df['产品分类'] = df['产品编号'].str[:3] # 提取3位作为分类 # 示例:使用正则表达式提取信息 import re if '描述' in df.columns: df['规格'] = df['描述'].apply(lambda x: re.search(r'\d+[xX]\d+', x).group() if re.search(r'\d+[xX]\d+', x) else '') ``` 3. **处理特殊需求**: ```python # 仅合并特定sheet df = pd.read_excel(file, sheet_name='数据表') # 添加行号标识 df.insert(0, '行ID', range(1, len(df)+1)) ``` #### 注意事项: 1. 确保已安装依赖库: ```bash pip install pandas openpyxl ``` 2. 文件路径使用正斜杠`/`或双反斜杠`\\` 3. 处理建议备份原始数据 4. 大文件处理可添加进度显示: ```python for i, file in enumerate(excel_files): print(f'处理中: {i+1}/{len(excel_files)} - {os.path.basename(file)}') # 处理代码... ``` > 提示:实际使用时请根据数据结构和需求调整列名和计算逻辑。如果遇到特殊格式要求,可结合`xlwings`库实现更复杂的Excel操作[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值