2017-10-04 90 views
0

我真的很希望它的東西很簡單,即時消失。我正在閱讀使用Python熊貓的Excel工作簿。當我將我的列重命名爲數字1:len(列)時,它會跳過前幾列。用pandas解析Excel數據 - 爲什麼在重命名列時跳過了列?

似乎只有在單元格中沒有值時才跳過它們。即使列沒有價值,我仍然希望它給它們編號1,2,3 ...

xl = pd.ExcelFile('Excel.xlsm') 
df = xl.parse('Worksheet1') 
df.columns = [str(x) for x in range(0,df.shape[1])] 

我希望有人可以點我在正確的方向。我曾嘗試使用標題跳過前幾列,但沒有給我一個一致和可靠的結果。謝謝!

This is the output I get with skipped columns.

+0

你需要'df = pd.read_excel('Excel.xlsm','Worksheet1',header = None,skiprows = 1)'? – jezrael

+1

第一列叫'索引' - 所以也許這就是爲什麼不能重命名它的原因。在用'heade = None'讀取後得到int列名稱,所以可以使用'df.columns =(df.columns + 1).astype(str)' – jezrael

+1

使用read_excel而不是解析爲我工作並且實際上解決了其他一些問題我遇到的問題,謝謝! – Ciaran

回答

1
#dataframe have default columns names 
df = pd.DataFrame({0:list('abcdef'), 
        1:[4,5,4,5,5,4], 
        2:[7,8,9,4,2,3]}) 

print (df) 
    0 1 2 
0 a 4 7 
1 b 5 8 
2 c 4 9 
3 d 5 4 
4 e 5 2 
5 f 4 3 

#first column called index 
print (df.index) 
RangeIndex(start=0, stop=6, step=1) 

#check columns names (RangeIndex can be also) 
print (df.columns) 
Int64Index([0, 1, 2], dtype='int64') 

#add 1 to columns anmes and convert to str 
df.columns = (df.columns + 1).astype(str) 
print (df) 
    1 2 3 
0 a 4 7 
1 b 5 8 
2 c 4 9 
3 d 5 4 
4 e 5 2 
5 f 4 3 

print (df.columns) 
Index(['1', '2', '3'], dtype='object') 

變革列名的另一種解決方案是rename

df = df.rename(columns = lambda x: str(x + 1)) 
print (df.columns) 
Index(['1', '2', '3'], dtype='object') 

如果想創建1,2,3..N範圍字符串列:

df = pd.DataFrame({'a':list('abcdef'), 
        'f':[4,5,4,5,5,4], 
        'm':[7,8,9,4,2,3]}) 

print (df) 
    a f m 
0 a 4 7 
1 b 5 8 
2 c 4 9 
3 d 5 4 
4 e 5 2 
5 f 4 3 

df.columns = pd.RangeIndex(1, df.shape[1] + 1).astype(str) 

print (df.columns) 
Index(['1', '2', '3'], dtype='object') 

print (df) 
    1 2 3 
0 a 4 7 
1 b 5 8 
2 c 4 9 
3 d 5 4 
4 e 5 2 
5 f 4 3