如何操作数据框中的列 header 字符串

how to manipulate column header strings in a dataframe

如何删除第 headers 列中的部分字符串“test_”。图片数据框有很多列,所以 df.rename(columns={"test_Stock B":"Stock B"}) 不是我正在寻找的解决方案!


import pandas as pd

data = {'Stock A':[1, 1, 1, 1],
           'test_Stock B':[3, 3, 4, 4],
           'Stock C':[4, 4, 3, 2],
           'test_Stock D':[2, 2, 2, 3],
           }

df = pd.DataFrame(data)

# expect
data = {'Stock A':[1, 1, 1, 1],
           'Stock B':[3, 3, 4, 4],
           'Stock C':[4, 4, 3, 2],
           'Stock D':[2, 2, 2, 3],
           }

df_expacte = pd.DataFrame(data)

我希望所有列 headers 仅标记为“Stock x”而不是“test_Stock x”。谢谢你的想法!

您可以通过列表理解重新定义列:

df.columns = [x.replace("test_","") for x in df]

这输出:

   Stock A  Stock B  Stock C  Stock D
0        1        3        4        2
1        1        3        4        2
2        1        4        3        2
3        1        4        2        3

您可以在使用以下代码将数据转换为数据框之前清理数据:

cleaned_data = {k.replace('test_', ''): v for k,v in data.items()}

如果需要提取值 Stock x 使用 Series.str.extract:

#if need uppercase letter after Stock + space
df.columns = df.columns.str.extract('(Stock\s+[A-Z]{1})', expand=False)
#if need any value after Stock + space
#df.columns = df.columns.str.extract('(Stock\s+.*)', expand=False)
print (df)
   Stock A  Stock B  Stock C  Stock D
0        1        3        4        2
1        1        3        4        2
2        1        4        3        2
3        1        4        2        3

或者如果需要删除 test_ 使用 Series.str.replace:

df.columns = df.columns.str.replace('test_', '')
import pandas as pd

data = {'Stock A':[1, 1, 1, 1],
           'test_Stock B':[3, 3, 4, 4],
           'Stock C':[4, 4, 3, 2],
           'test_Stock D':[2, 2, 2, 3],
           }

df = pd.DataFrame(data)

df.columns = [x.replace('test_','') for x in df.columns]

输出:

print(df)
Out[9]: 
   Stock A  Stock B  Stock C  Stock D
0        1        3        4        2
1        1        3        4        2
2        1        4        3        2
3        1        4        2        3

您可以使用正则表达式(参见python documentation)替换或删除前缀“test_”。 header 列可以被视为 python 列表或 pandas 系列。在任何情况下,您都可以迭代地对 headers.

列的每个元素应用替换

选项 A

Pandas 有一个 string processing methods 的 collection,您可以通过 pandas 系列的 str 属性访问它。由于 headers 列是一个系列,您可以将所需的模式替换为

df.columns = df.columns.str.replace(r'^test_', '')

选项 B

正则表达式模块可用于在每一列 header 上使用 re.sub 方法替换所需的模式,使用列表理解。

import re
df.columns = [re.sub(r'^test_', '', col) for col in df.columns]