pandas列名称字符串操作

时间:2017-09-19 01:55:35

标签: python pandas

你好我有一个带有长字符串重列名的Pandas 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

我想从列名中删除某些值,并将它们添加为列级别。

所以我最终会:

X220, Y220, Y220
1932, 2012, 2015

作为多级列。

我在list / dict理解中尝试过split / strip但是无法弄清楚如何链接这些方法(就像你可以在pandas中链替换)。我玩正则表达式,但我没有走远。

由于

2 个答案:

答案 0 :(得分:0)

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

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)

<强>输出:

    X220    Y220    Y220
    1932    1932    1932
0   1   3   5
1   2   4   6

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

<强>参考文献:

  1. MultiIndex / Advanced Indexing — pandas documentation

答案 1 :(得分:0)

您可以使用str.extract为列名提取所需的值,然后使用multiindex.from_tuples创建多索引

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

你得到了

    X220            Y220
    1932    2012    2015
0   1       3       5
1   2       4       6