如何洗掉列標題中的部分字串“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)
我希望所有列標題都只標記為“Stock x”而不是“test_Stock x”。謝謝你的想法!
uj5u.com熱心網友回復:
您可以通過串列理解重新定義列:
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
uj5u.com熱心網友回復:
您可以使用以下代碼在將資料轉換為資料框之前清理資料:
cleaned_data = {k.replace('test_', ''): v for k,v in data.items()}
uj5u.com熱心網友回復:
如果需要提取值,請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_', '')
uj5u.com熱心網友回復:
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
uj5u.com熱心網友回復:
您可以使用正則運算式(請參閱python 檔案)來替換或洗掉前綴“test_”。列標題可以被視為 python 串列或 pandas 系列。在任何情況下,您都可以在列標題的每個元素上迭代地應用替換。
選項 A
Pandas 有一系列字串處理方法,您可以通過strpandas Series 的屬性訪問這些方法。由于列標題是一個系列,您可以將所需的模式替換為,
df.columns = df.columns.str.replace(r'^test_', '')
選項 B
正則運算式模塊可用于使用re.sub每個列標題上的方法替換所需的模式,使用串列推導。
import re
df.columns = [re.sub(r'^test_', '', col) for col in df.columns]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/447944.html
