簡體   English   中英

如何操作 dataframe 中的 header 列字符串

[英]how to manipulate column header strings in a dataframe

如何刪除列標題中的部分字符串“test_”。 圖片 dataframe 有很多列,所以 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)

我希望所有列標題僅標記為“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

您可以在使用以下代碼將數據轉換為 dataframe 之前清理數據:

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]

output:

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 文檔)來替換或刪除前綴“test_”。 列標題可以被視為 python 列表或 pandas 系列。 在任何情況下,您都可以迭代地對列標題的每個元素應用替換。

選項A

Pandas有一個字符串處理方法集合,可以通過pandas系列的str屬性訪問。 由於列標題是一個系列,您可以將所需的模式替換為,

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM