在Colab中读取CSV并从文件名拆分新增两列至DataFrame开头
问题与解决方案
需求说明
从Google Drive读取符合Platform_Company.csv命名规则的CSV文件(例如Instagram_Microsoft.csv)到DataFrame,需将文件名拆分为platform和company两列并添加到DataFrame开头;同时确认现有代码中layer_number的必要性。
现有代码
from pathlib import Path import pandas as pd ls_data = [] csv_directory = '/content/drive/MyDrive/Colab Notebooks/' for idx, filename in enumerate(Path(csv_directory).glob('*Instagram_*.csv')): df_temp = pd.read_csv(filename) df_temp.insert(0, 'layer_number', idx) ls_data.append(df_temp) df = pd.concat(ls_data, axis=0)
关于layer_number的必要性
layer_number是给每个读取的文件分配的递增索引(从0开始),仅用于标记当前行来自第几个文件。如果业务逻辑不需要追踪数据来源的文件顺序,这个字段可以直接删除;若有溯源需求,则保留即可。
整合后的完整解决方案
以下代码既保留原逻辑(读取指定规则的CSV),又实现了拆分文件名到platform和company列并插入到DataFrame开头的需求:
from pathlib import Path import pandas as pd ls_data = [] csv_directory = '/content/drive/MyDrive/Colab Notebooks/' # 遍历符合命名规则的CSV文件 for filename in Path(csv_directory).glob('*Instagram_*.csv'): # 读取当前CSV文件 df_temp = pd.read_csv(filename) # 获取不带路径和后缀的纯文件名 file_basename = filename.stem # 按第一个下划线拆分文件名,避免公司名含下划线导致拆分错误 platform, company = file_basename.split('_', maxsplit=1) # 将platform和company插入到DataFrame最开头 df_temp.insert(0, 'company', company) df_temp.insert(0, 'platform', platform) # (可选)若需保留layer_number,取消下方注释 # df_temp.insert(0, 'layer_number', idx) ls_data.append(df_temp) # 合并所有DataFrame并重置索引 df = pd.concat(ls_data, axis=0, ignore_index=True)
代码说明
- 提取纯文件名:通过
filename.stem直接获取去掉路径和.csv后缀的文件名(如Instagram_Microsoft)。 - 安全拆分文件名:使用
split('_', maxsplit=1)仅按第一个下划线拆分,确保公司名称含下划线时不会被错误拆分。 - 插入列到开头:利用
insert(0, 列名, 值)将platform和company放在DataFrame最左侧。 - 合并优化:添加
ignore_index=True重置合并后的索引,避免不同文件的索引重复冲突。
内容的提问来源于stack exchange,提问作者user21407177
相关产品推荐
相关产品推荐

