46.用多种分隔符分列

李光朱课程 2024-04-25 03:25:41
案例导入

如下图,对出生日期字符串数据,将字符“年”和“月”用作分隔符,进行分列,注意分列得到的最后一部分去掉最后一个字符。分列的结果添加到导入数据右侧。添加代码注释。

图1.原始数据表

文心一言提示词

打开百度“文心一言”,输入提示词:“你是pandas专家,文件路径为:D:/Samples/员工生日.xlsx。用pandas导入第1个工作表中的数据,导入前2列"姓名"和“出生日期”数据,引擎为"openpyxl"。对出生日期字符串数据,将字符“年”和“月”用作分隔符,进行分列,注意分列得到的最后一部分去掉最后一个字符。分列的结果添加到导入数据右侧。添加代码注释。”

显示结果如下:

以下是完成指定任务的代码,包括使用pandas读取Excel文件、选择特定列、对出生日期进行分列处理,并将分列后的结果添加到原始数据右侧。代码注释详细说明了每个步骤。

import pandas as pd import numpy as np # 定义文件路径 file_path = 'D:/Samples/员工生日.xlsx' # 使用pandas读取Excel文件的第1个工作表,并只导入"姓名"和"出生日期"两列 # 引擎指定为"openpyxl",适用于.xlsx格式的文件 df = pd.read_excel(file_path, sheet_name=0, usecols=['姓名', '出生日期'], engine='openpyxl') # 定义一个函数来处理出生日期字符串,将其分割为年、月和日 def split_date(date_str): if pd.isnull(date_str): # 处理空值 return (np.nan, np.nan, np.nan) try: # 尝试分割日期字符串,并去除年、月后的字符 parts = date_str.split('年') year = parts[0] month_day = parts[1].split('月') month = month_day[0] day = month_day[1].rstrip('日') if '日' in month_day[1] else month_day[1] return (year, month, day) except (IndexError, ValueError): # 处理格式错误的情况 return (np.nan, np.nan, np.nan) # 应用函数到"出生日期"列,并将结果分配给新的列 df[['年份', '月份', '日期']] = df['出生日期'].apply(split_date).apply(pd.Series) # 打印结果查看 print(df)

请注意,这段代码假设了日期字符串的最后一个字符是“日”,并使用正则表达式 r'日$' 来匹配并替换掉它。如果实际情况有所不同,比如日期格式是“XXXX年XX月XX”,则不需要去掉最后一部分的最后一个字符,可以直接使用 str.split 而不进行 str.replace。

此外,代码中使用了 usecols 参数来仅读取前两列数据,这有助于提高效率,特别是当Excel文件很大时。

最后,代码中包含了对分列结果的列名指定('年份', '月份', '日期'),并将这些新列添加到了原始数据框的右侧。如果不需要特定的列名,可以省略列名列表,str.split 会自动生成默认的列名(如 0, 1, 2 等)。

Python运行结果

图2.Python运行结果

本合集使用的工具如下:

文心一言:3.5版本

Python编辑器:3.9.0

申明:以上结果皆为实际运行结果,如遇到无法运行可在评论区留言。部分数据来自网络,如有侵权请私信告知,感谢!

0 阅读:1

李光朱课程

简介:感谢大家的关注