pandas字符串处理及列转行

文章介绍了如何在Python的Pandas库中使用str函数对DataFrame进行各种字符串操作,如截取、分割、合并、替换、判断和格式化,以提取和处理数据中的信息。

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

df1.loc[:,'前部']=df1['班级名称'].str.slice(0,15)
df1.loc[:,'大区']=df1['班级名称'].str.split('-').str[0]
df1.loc[:,'版本']=df1['班级名称'].str.split('-').str[1]
df1.loc[:,'进度']=df1['班级名称'].str.split('-').str[2]
df1.loc[:,'时间']=df1['班级名称'].str.split('-').str[3]
df1.loc[:,'时间1']=df1['时间'].str.split('(').str[0]
df1['id尾号']=df1['姓名id'].str.split('-',n=2).str[1].str.slice(0,6)

常规字符串截取处理

(编辑技巧:mac❀+数字2,设定为目录)

1、str.cat和指定字符串

df1.loc[:,'合并']=df1['大区'].str.cat(df1['版本'],sep='-').str.cat(df1['进度'],sep='-')

str.cat可以连接多列,并设定连接符

2、split按照指定字符分割

df1.loc[:,'大区']=df1['班级名称'].str.split('-').str[0]

df1['id尾号']=df1['姓名id'].str.split('-',n=2).str[1].str.slice(0,6)

以上为按‘-’分割某列,并取分割后的第一部分字符串

split('-',expand=True,n=1),expand默认是False,若设置为True则会将列表展开,变成多列,n是设置分列的次数,n=1则分割一次,成2部分

rsplit和split用法一致,只不过是从右边开始分列

3、partition按照指定字符进行分割,且只分割一次

df1.loc[:,'1']=df
### MySQL 中实现转行功能 在关系型数据库中,转行通常被称为 **UNPIVOT** 操作。然而,MySQL 并未原生支持 `UNPIVOT` 关键字,因此需要通过其他方法来实现这一需求。 以下是几种常见的解决方案: #### 方法一:使用 UNION ALL 实现转行 可以通过手动编写 SQL 查询语句并利用 `UNION ALL` 将每的数据转化为行的形式。这种方法适用于已知名的情况。 ```sql SELECT 'column1' AS source_column, column1 AS value FROM your_table WHERE column1 IS NOT NULL UNION ALL SELECT 'column2', column2 FROM your_table WHERE column2 IS NOT NULL UNION ALL SELECT 'column3', column3 FROM your_table WHERE column3 IS NOT NULL; ``` 上述查询会将 `your_table` 表中的 `column1`, `column2`, 和 `column3` 转化为两表格结构,其中第一为原始名,第二为对应的值[^4]。 --- #### 方法二:动态生成 SQL 语句 当的数量较多或者不确定具体名时,可以借助存储过程或编程语言(如 Python 或 Shell)动态生成所需的 SQL 语句。 以下是一个简单的例子,展示如何通过拼接字符串构建动态 SQL: ```sql SET @sql = NULL; SELECT GROUP_CONCAT( CONCAT('SELECT ''', COLUMN_NAME, ''' AS source_column, ', COLUMN_NAME, ' AS value FROM your_table WHERE ', COLUMN_NAME, ' IS NOT NULL') ) INTO @sql FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'your_table'; SET @final_sql = CONCAT('(', REPLACE(@sql, ',', ') UNION ALL ('), ')'); PREPARE stmt FROM @final_sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; ``` 此脚本从 `INFORMATION_SCHEMA.COLUMNS` 动态获取表的名,并将其组装成类似于方法一所述的 `UNION ALL` 结构[^3]。 --- #### 方法三:引入辅助工具或中间层处理 对于复杂场景,也可以考虑将数据导出到外部工具(如 Pandas 库或其他 ETL 工具),完成转行后再重新导入 MySQL 数据库。这种方式尤其适合大规模数据集或频繁变更的需求。 例如,在 Python 的 Pandas 库中可轻松实现该操作: ```python import pandas as pd # 假设 df 是一个 DataFrame 对象 df_melted = pd.melt(df, var_name='source_column', value_name='value') print(df_melted) ``` 随后可通过 SQLAlchemy 或 pymysql 等模块将结果写回 MySQL 数据库。 --- ### 注意事项 - 转行过程中可能会遇到重复值问题,需提前规划好去重逻辑。 - 如果目标字段存在空值,则应在查询条件中加入过滤器以忽略这些记录。 - 需要确保源表的设计合理,避免因冗余信息导致性能下降。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值