2017-01-20 90 views
1

我是一个newB python建模器,目前遇到了一些代码行,这可能对很多人都很基本。Python数据帧行和列

我正在使用python 2.7并已成功使用xlwings将外部工作簿中的命名范围复制到pd.dataframe格式。除了df.index和df.columns之外,所有东西都可以正常工作。目前,代码将1到n(基于行数和列数)分配为索引和列名。

有没有办法,我使用我导入的数据的第一列值作为df.index和第一行作为df.column?

能有人请帮助我得到的东西是这样的:

df = pd.DataFrame(myExcelRange, df.index = 'first column values', df.columns = 'first row values') 

myExcelRange的形状和名称可能每次都不同。

任何指导方针将不胜感激。

实施例:

> myExcelRange

ITEM Dan Jane Fan 
A 77 78 40 
B 89 53 72 
C 20 19 79 
D 81 54 93 
E 77 76 99 

熊猫正在返回

0 1 2 3 
0 ITEM Dan Jane Fan 
1 77 78 40 0 
2 89 53 72 0 
3 20 19 79 0 
4 81 54 93 0 
5 77 76 99 0 

期望

ITEM Dan Jane Fan 
A 76 89 100 
B 59 72 24 
C 69 73 19 
D 70 92 43 
E 65 94 30 
+0

什么是'type(myExcelRange)'? – jezrael

+0

这是一个'列表'类型 –

+0

您可以添加一些样例,例如'myExcelRange = ['a','b','c']'或'myExcelRange = [['a','b','c'], ['d','e','f']]'和期望的输出? – jezrael

回答

0

您可以set_index与第一列,然后通过iloc选择第一行,并分配给df.columns,由iloc太最后删除数据第一行:

myExcelRange = [['a','b','c'],['d','e','f'],['g','h','i']] 
df = pd.DataFrame(myExcelRange) 
print (df) 
    0 1 2 
0 a b c 
1 d e f 
2 g h i 

df = df.set_index(0) 
df.columns = df.iloc[0,:] 
#for nicer df remove index and column names 
df.index.name = None 
df.columns.name = None 

print (df.iloc[1:,:]) 
    b c 
d e f 
g h i 

正如Alex Fung提到的,也许是可能使用read_excel与参数index_col

df = pd.read_excel('file.xlsx', index_col=0) 
print (df) 
     Dan Jane Fan 
ITEM     
A  77 78 40 
B  89 53 72 
C  20 19 79 
D  81 54 93 
+0

它现在正在打印第一行两次 - 一个作为标题,另一个作为数据 –

+0

有什么问题? – jezrael

+0

欢呼J和Alex,我以前没有用过。但我现在已经明白了。 –