【问题标题】:Reformatting data imported from an excel file in pandas重新格式化从 Pandas 中的 excel 文件导入的数据
【发布时间】:2014-07-02 15:44:28
【问题描述】:

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

工作表1:

名称值 pvalues
面包 3 0.001
牛奶 2 0.003
鸡蛋 1 0.001

工作表2:

名称值 pvalues
面包 6 0.002
奶酪 2 0.003
沙拉 11 0.0001

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

名称 Values_sheet1 Values_sheet2
面包 3 6
牛奶 2 0
鸡蛋 1 0
奶酪 0 4
沙拉 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 工作,但它只返回两个电子表格中的共同值并丢弃其余的...

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

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

【问题讨论】:

  • 您为什么要尝试将数据框与其自身合并? "pd.merge(dfs[name], dfs[name]..."
  • 一般来说,您需要做的就是阅读每张纸,将其索引(使用set_index)设置为“名称”,然后根据工作表名称。
  • 感谢您的评论。我使用了下面的方法,因为我不确定它如何与 rsuffix 一起工作......

标签: python excel pandas


【解决方案1】:

由于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 

希望对您有所帮助。

【讨论】:

  • 谢谢亚历克斯!它有效...我必须将检索到的名称从 unicode 转换为 utf-8,但这是我遇到的唯一问题。如果名称是 unicode 格式,似乎连接不起作用。
  • 很高兴你明白了
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 2018-11-16
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多