重命名 `pandas` 數據中列的名稱是一種常見的數據預處理任務。這通常是因為原始數據中的列名稱可能不夠清晰或準確。例如,列名可能包含空格、大寫字母、特殊字元或拼寫錯誤。 使用 `pandas` 的 `rename`函數可以幫助我們更改列名,從而使數據更加清晰和易於理解。此外,重命名列名還可以確保 ...
重命名 pandas
數據中列的名稱是一種常見的數據預處理任務。
這通常是因為原始數據中的列名稱可能不夠清晰或準確。例如,列名可能包含空格、大寫字母、特殊字元或拼寫錯誤。
使用 pandas
的 rename
函數可以幫助我們更改列名,從而使數據更加清晰和易於理解。
此外,重命名列名還可以確保您的代碼在維護和共用時更加易於交流和重用。
1. 列名中的特殊字元
比如如下測試數據:
import pandas as pd
df = pd.DataFrame(
{
"col name": ["name1", "name2", "name3"],
"#num@$": [1, 1, 2],
"坐標A": [1.2, 1.3, 2.3],
"坐標B": [2.3, 3.3, 5.7],
},
)
df
1.1. rename函數
使用rename
函數消除列名中的空格和特殊符號:
df.rename({"col name": "col_name", "#num@$": "num"}, axis=1)
需要修改的列名不多時,用這種方式比較直觀。
1.2. columns屬性
使用columns
修改列名時,需要設置所有的列名,哪怕不需要修改的列名也要列出來。
df.columns = ["col_name", "num", "坐標A", "坐標B"]
df
當需要修改的列名比較多,或者所有列名都需要修改時,用這種方式。
1.3. replace方法
df.columns = df.columns.str.replace(" ", "_")
df.columns = df.columns.str.replace("[#@$]", "", regex=True)
df
這種方式還支持通過正則表達式的方式替換,適合複雜替換的場景。
使用正則替換時,設置參數:regex=True
2. 列名的首碼
當遇到來自不同系統的同類數據時,合併之後會發現很多同樣的列名,難以區分。
比如:
df1 = pd.DataFrame(
{
"坐標X": [1.2, 1.3, 2.3],
"坐標Y": [2.3, 3.3, 5.7],
},
)
df2 = pd.DataFrame(
{
"坐標X": [2.2, 3.3, 7.3],
"坐標Y": [1.3, 4.3, 3.7],
},
)
df = pd.concat([df1, df2], axis=1)
df
這時,我們可以在合併前給不同數據來源的數據的列名上加一個首碼(add_prefix
)。
df1 = df1.add_prefix("A_")
df2 = df2.add_prefix("B_")
df = pd.concat([df1, df2], axis=1)
df
3. 列名的尾碼
除了添加首碼,也可以用添加尾碼的方式(add_suffix
)來區分不同數據源的數據。
df1 = df1.add_suffix("_A")
df2 = df2.add_suffix("_B")
df = pd.concat([df1, df2], axis=1)
df