pandas列名字符串操作

2024-10-02 10:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我有一个长字符串重列名熊猫df,我想要一些数字和一个字符串的列名:

df = pd.DataFrame(
[[1, 3, 5], [2, 4, 6]],
columns=['Base + Trial Spot Price(X220) Settle Price S=1 [1.00] 1932', 'Base + Trial Spot Price(Y220) Settle Price S=1 [1.00] 2012', 'Base + Trial Spot Price(Y220) Settle Price S=1 [1.00] 2015'])

enter image description here

我想从列名中去掉某些值,并将它们作为列级别添加。在

所以我最后会说:

^{pr2}$

作为多级列。在

我尝试过拆分/剥离内部列表/dict理解,但不知道如何链接这些方法(比如在pandas中可以连锁替换)。我玩过regex,但没走多远。在

谢谢


Tags: columns字符串imagedataframedfbase数字price
2条回答

您可以从extract column数据创建元组并将其传递给函数pd.MultiIndex.from_tuples()这将生成列,然后您可以重新创建dataframe。请在下面找到代码。在

import pandas as pd
import numpy as np

pd.set_option('display.multi_sparse', False)

values = [[1, 3, 5], [2, 4, 6]]
df = pd.DataFrame(values,columns=['Base + Trial Spot Price(X220) Settle Price S=1 [1.00] 1932', 'Base + Trial Spot Price(Y220) Settle Price S=1 [1.00] 2012', 'Base + Trial Spot Price(Y220) Settle Price S=1 [1.00] 2015'])


cols = pd.MultiIndex.from_tuples([(df.columns[0][24:28], df.columns[0][54:]), (df.columns[1][24:28], df.columns[0][54:]), (df.columns[2][24:28], df.columns[0][54:])])
pd.DataFrame(values, columns=cols)

输出:

^{pr2}$

pd.set_option('display.multi_sparse', False)用于将多轴配置为具有重复的列名。在

参考文献:

  1. MultiIndex / Advanced Indexing — pandas documentation

你可以用str.提取物为列名提取所需的值,然后multiindex.from元组用于创建多索引

df.columns = df.columns.str.extract('.*?\((.*)\).*?(\d{4})', expand=True)
df.columns = pd.MultiIndex.from_tuples(df.columns)

你得到了

^{pr2}$

相关问题 更多 >

    热门问题