[英]Rename Multiple pandas Dataframe Column Names using function
嘗試使用正則表達式重命名熊貓數據框列,我知道如何按照下面的方法重命名列表,但無法使用 df.rename 獲得成功結果。
輸入:
df.columns.values = ['Time', '101 <RoomTemperature> (C)', '102 <ChemberTemperature> (C)', '103 <U1100> (C)', '103 <U1200 (C)', '103 U1500> (C)']
按照下面的代碼使用正則表達式嘗試重命名數據框列,但它不起作用。 我想不出如何在 df.rename 方法中將多條指令放在一起。
df.rename(columns={c: c.strip() for c in df.columns.values.tolist()
if "<" and ">" in c:
re.search(r"(?<=<).*(?=>)",c).group(0)}, inplace=True)
我希望它遵循正則表達式並將其重命名為如下所示:
df.columns.values = ["Time", "RoomTemperature", "ChemberTemperature", "U1100", "103 <U1200 (C)", "103 U1500> (C)"]
您可以將功能提取到函數中並執行以下操作:
import re
import pandas as pd
# sample data
df = pd.DataFrame(
columns=['Time', '101 <RoomTemperature> (C)', '102 <ChemberTemperature> (C)', '103 <U1100> (C)', '103 <U1200 (C)',
'103 U1500> (C)'])
# replacement function
def repl(name):
match = re.search(r"<(.*?)>", name)
return match.group(1) if match else name
df.rename(columns={c: repl(c.strip()) for c in df.columns}, inplace=True)
print(df.columns)
輸出
Index(['Time', 'RoomTemperature', 'ChemberTemperature', 'U1100',
'103 <U1200 (C)', '103 U1500> (C)'],
dtype='object')
話雖如此,您還需要修復正則表達式。
您可以使用正則表達式根據您的要求提取匹配組,然后您可以使用DataFrame.rename
來更改列標簽。
嘗試這個:
import re
col_dict = {}
for col in df.columns:
mobj = re.search(r"\<(.*?)\>", col)
if mobj:
col_dict[col] = mobj.group(1)
df.rename(columns=col_dict, inplace=True)
重命名df.columns
后將是:
['Time', 'RoomTemperature', 'ChemberTemperature', 'U1100', '103 <U1200 (C)', '103 U1500> (C)']
另一個解決方案,正則表達式可能會有一些不友好的外觀,盡管它很強大:
columns = ['Time', '101 <RoomTemperature> (C)', '102 <ChemberTemperature> (C)', '103 <U1100> (C)', '103 <U1200 (C)', '103 U1500> (C)']
df = pd.DataFrame([[1,2,3,4,5,6]],columns=columns)
p = re.compile(r'((?<=<).*?(?=>))')
#create a dict for the replacement
replace_dict = {w:p.search(w).group() for w in df.columns if p.search(w)}
#pass dictionary into rename method
df.rename(columns=replace_dict)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.