我有20列的数据框.它们都有一个共同的文本和序列号.我想修剪文本部分并缩短名称.下面是一个例子:

xdf = pd.DataFrame({'Column1':[10,20],'Column2':[80,90]})

   Column1  Column2
0       10       80
1       20       90

预期输出:

        C1       C2
0       10       80
1       20       90

解决方案1:

oldcols = ['Column1','Column2']
newcols = ['C1','C2']
xdf.rename(columns=dict(zip(oldcols,newcols)),inplace=True)

        C1       C2
0       10       80
1       20       90

解决方案2:

for i in range(len(oldcols)):
    xdf.rename(columns={'%s'%(xdf[i]):'%s'%(xdf[i].replace('Column','C'))},inplace=True)

raise KeyError(key) from err

解决方案1很好,但我必须准备一个新旧列名列表.相反,我希望遍历每个列名并替换列文本.然而,解决方案2不起作用.

推荐答案

你可以在列上用str.findall分为文本和数字;然后使用列表理解,只取第一个字母,并将其与每个列名称的数字连接起来:

xdf.columns = [x[0]+y for li in xdf.columns.str.findall(r'([A-Za-z]+)(\d+)') for x,y in li]

输出:

   C1  C2
0  10  80
1  20  90

Python相关问答推荐

机器人与Pyton Minecraft服务器状态不和

如何将带有逗号分隔的数字的字符串解析为int Array?

过载功能是否包含Support Int而不是Support Int?

实现的差异取决于计算出的表达是直接返回还是首先存储在变量中然后返回

acme错误-Veritas错误:模块收件箱没有属性linear_util'

难以在Manim中正确定位对象

删除最后一个pip安装的包

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

Asyncio:如何从子进程中读取stdout?

Pandas Loc Select 到NaN和值列表

使用groupby方法移除公共子字符串

删除marplotlib条形图上的底边

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

为什么我的sundaram筛这么低效

Python日志(log)模块如何在将消息发送到父日志(log)记录器之前向消息添加类实例变量

如何在Python Pandas中填充外部连接后的列中填充DDL值

为什么t sns.barplot图例不显示所有值?'

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

Scipy差分进化:如何传递矩阵作为参数进行优化?