重新格式化从pandas中的excel文件导入的数据

时间:2014-05-14 14:12:01

标签: python excel pandas

我正在尝试从excel文件导入数据。数据通过文件中的多个电子表格进行排列。数据如下所示:

Sheet 1中:

Names  Values  pvalues   
Bread   3      0.001  
Milk    2      0.003  
Eggs    1      0.001

Sheet 2中:

Names  Values  pvalues   
Bread     6    0.002  
Cheese    2    0.003  
Salad    11    0.0001

我想获得数据帧的最终结构:

Names  Values_sheet1  Values_sheet2  
Bread     3             6  
Milk      2             0  
Eggs      1             0  
Cheese    0             4  
Salad     0            11
  • 如何合并列'名称'所以我有一次所有的名字,并跟踪其他列中的相应数据?

在文档和其他帖子的帮助下,我可以执行以下操作:

import pandas as pd

input_handle = pd.ExcelFile('file.xls')

#get a dictionnary with all the sheets as keys and their data as values
dfs = {sheet_name : input_handle.parse(sheet_name) for sheet_name in input_handle.sheet_names}

#Keep track of the Sheet names
SheetNames = []
for i in dfs.keys:
    SheetNames.append(i)

#Get new dataframe with merged data from each spreadsheet
New_df = [pd.merge(dfs[name], dfs[name], on='Names') for name in SheetNames]

我的代码中的最后一行不起作用...我在合并2个电子表格时设法让pd.merge工作,但它只返回两者中常见的值并丢弃其余的...

  • 是否可以跟踪每个值的p值?

非常感谢您的任何见解或帮助!

1 个答案:

答案 0 :(得分:0)

由于values列可能会在DataFrame中被读作系列,因此这里有一个示例可以帮助您:(注意,为了简洁,我省略了pvalues列)

sheet1 = pd.Series([3,2,1], index=['Bread', 'Milk', 'Eggs'], name='Values_sheet1')
sheet2 = pd.Series([6,2,11], index=['Bread', 'Cheese', 'Salad'], name='Values_sheet2')

# concatenate the two series and fill in the missing data with zeros
result = pd.concat([sheet1,sheet2], axis=1).fillna(0)

print result

应该显示为:

        Values_sheet1  Values_sheet2
Bread               3              6
Cheese              0              2
Eggs                1              0
Milk                2              0
Salad               0             11

此外,在您的代码示例中,您有最后一个结果集的行:

Cheese    0             4 

我猜4是拼写错误,因为它应该是2,就像来自sheet2的这一行:

Cheese    2    0.003 

希望有所帮助。