2016-12-02 29 views
0

所以,我正在用python寫熊貓。我編寫的代碼從excel文件中提取特定的列標題,該工具可以正常工作,但我不希望每次都要進入代碼以更改列標題的名稱,以便在處理具有相同數據的新文件時進行提取。如何讀取相同的列標題,但在新文件中以不同的方式「拼寫」。熊貓

這裏是我的提取方法:

xlsx = pd.ExcelFile('filepath') 
df = pd.read_excel(xlsx, 'Tabelle1') 

df2 = df[['ZONE_NAME','POLYGONSTRING']] 

df2.to_csv('filepath\name', sep=';', index=False, header=True) 

所以當我運行這段代碼到另一個Excel文件,我希望它爲「ZONE_NAME」這可能是「區域名稱」接受任何可能的名稱,「區域名稱」 etc ...

+0

你能展示你寫的代碼的相關部分嗎?你似乎在問,如何在每次加載文件時不必引用每個列,但是如果你像讀過的那樣用'''df = pd.read_excel()''讀入文件,而不必改變任何東西應該像'''columns = list(df.columns.values)'''一樣簡單。所以一定要包括你寫的更好的答案。 – ralston

+0

@ralston我很抱歉,我對這個問題進行了編輯,這對我所問的內容有多少意義? 對不起,這個網站太可怕了,再次感謝你! –

回答

1

如果您的問題僅限於編寫像「ZONE_NAME」(例如,「zone_name」,「ZONENAME」,「ZONE_NAME」等)的列的不同方式,那麼爲什麼不只是使用某種類型的過濾器列名:

xlsx = pd.ExcelFile('filepath') 
df = pd.read_excel(xlsx, 'Tabelle1') 

# This will filter out any non-alphabetical characters from each 
# column name and lower it (so "ZONE_NAME" "ZONENAME" and "zone_NAME" 
# would become "zonename") 
filtered_columns = [re.sub('[^a-zA-Z]', "", c).lower() for c in list(df.columns.values)] 
df.columns = filtered_columns 

df2 = df[filtered_columns] 

df2.to_csv('filepath\name', sep=';', index=False, header=True) 

希望這有助於。

+0

是的,這正是我一直試圖得到的。當我運行上面的(第二)代碼時,我得到這個錯誤,雖然 KeyError:「['locationname''locationid''zonetype''zonename''polygonstring'\ n'reservedspaces''validfrom''validto''taxrate''評論']不在索引中「 它來自」df2 = df [columns]「inline @ralston –

+0

@Michael我編輯了原始答案。請接受它作爲答案,如果它可以幫助你upvote。 – ralston

+0

非常感謝你@ralston –

1

Pandas read_csv會自動檢測列標題。無需提前指定任何內容。您的文章缺少指向任何圖片的鏈接,但最好是在線發佈數據樣本。

+0

所以excel數據最初有5個其他列標題。 「ZONE_NAMES」和「POLYGONSTRINGS」是即時切片的工具,但是當我將這些代碼用於其他需要相同數據的excel文件時,如果有意義的話,列標題可能會改變爲相同的名稱; 「zonename」,「區域名稱」等... @dartdog –

+0

因此,您可以通過位置而不是標籤訪問列,如果有幫助?如果這種方法效果更好,您可以隨意將列重命名爲一致。總之,似乎並不容易理解你的潛在問題? – dartdog

+0

不熟悉熊貓的read_csv,但它看起來不像它執行字符串規範化。如果它可以用來提取標題,他可以標準化他正在查找的標題字符串,並查看該提取列表中是否存在該標題,然後使用該字符串執行提取方法。也不是一個Python開發人員,堅持我的頭不屬於它。 – TheUnknownGeek

相關問題