我正在制作一個流線型應用程式,用戶可以在其中上傳 csv 或 excel 檔案并完成一些分析。
當然,不同的用戶會以不同的方式命名他們的列名。
我希望程式足夠聰明,可以推斷出哪些列名可能代表分析所需的內容。
例如,我希望程式能夠讀取這兩個資料幀:
df1 = pd.DataFrame({'id_number':[1,2,3], 'reason_code':['TH7','JK9','PI2'], 'reason_code_description':['A','B','C'], 'name':['karen','pluto','imogen']})
df2 = pd.DataFrame({'Number (ID)':[1,2,3], 'Reason of Code':['TH7','JK9','PI2'], 'Description of Reason Code': ['A','B','C'], 'Name of User':['karen','pluto','imogen']})
這樣程式就會理解包含“ID”和“Number”這兩個詞的列名是 id_number 列;包含單詞“reason”和“code”但不包含“description”的列名是 reason_code 列,等等...
我認為要做到這一點,最好的選擇是使用 str.contains 來識別某些子字串,然后將這些特定的列名重命名為程式其余部分所需的名稱。
這是我嘗試過的示例(不起作用,但沒有引發錯誤):
df2.columns[(df2.columns.str.contains("reason", case=False)) & (df2.columns.str.contains("code", case=False)) & (~df2.columns.str.contains("description", case=False))].rename("reason_code",inplace=True)
提前致謝
uj5u.com熱心網友回復:
這是一種方法,創建一個函式來重命名列名。
代碼
import pandas as pd
def rename_colname(name):
"""
Define rename logic here.
"""
cname = name.lower()
if 'reason' in cname and 'code' in cname and not 'description' in cname:
return 'reason_code'
elif 'number' in cname and 'id' in cname:
return 'id_number'
elif 'reason' in cname and 'code' in cname and 'description' in cname:
return 'reason_code_description'
elif 'name' in cname and 'user' in cname:
return 'name'
return name
df1 = pd.DataFrame({'id_number':[1,2,3], 'reason_code':['TH7','JK9','PI2'],
'reason_code_description':['A','B','C'],
'name':['karen','pluto','imogen']})
df2 = pd.DataFrame({'Number (ID)':[1,2,3], 'Reason of Code':['TH7','JK9','PI2'],
'Description of Reason Code': ['A','B','C'],
'Name of User':['karen','pluto','imogen']})
print(f'ideal colname frame:\n{df1}')
print(f'old colname frame:\n{df2}')
df2.columns = [rename_colname(name) for name in df2.columns]
print(f'new colname frame:\n{df2}')
輸出
ideal colname frame:
id_number reason_code reason_code_description name
0 1 TH7 A karen
1 2 JK9 B pluto
2 3 PI2 C imogen
old colname frame:
Number (ID) Reason of Code Description of Reason Code Name of User
0 1 TH7 A karen
1 2 JK9 B pluto
2 3 PI2 C imogen
new colname frame:
id_number reason_code reason_code_description name
0 1 TH7 A karen
1 2 JK9 B pluto
2 3 PI2 C imogen
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/484698.html
上一篇:資料從Excel匯出到CSV
