首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python将多个excel工作表合并为dataframe

Python将多个excel工作表合并为dataframe
EN

Stack Overflow用户
提问于 2018-08-01 00:47:15
回答 1查看 943关注 0票数 1

我有一个包含10个工作表的excel文件。有些工作表有数据,有些是空的,但这会定期更改,包括第一个和/或最后一个工作表。

使用Python2.7,我要做的是将所有的工作表加载到一个pandas df中,以便在另一个函数中进行处理。我还添加了一个带有工作表名称的列。加载工作表似乎工作得很好,但是我的一个列有14-20个字符的值,以0结尾。所以当我打印出字典时,它们看起来是正确的,但pandas正在转换为sci表示法,我不知道如何保留这些值。

以下是一些字典数据:

代码语言:javascript
复制
           API_NUM        NAME         DATE_START DATE_FINISH  SH_NAME
0   12345678910000   RAYES A - 1       2018-07-28  2018-08-25   Andy
1   12345678900000   RAYES A - 2       2018-07-28  2018-08-25   Mine
2   23456789090000   RAYES A - 3       2018-07-28  2018-08-25   Shef
3   34567890600000   RAYES A - 4       2018-07-28  2018-08-25   Mary
4   45678901220000   RAYES A - 5       2018-07-28  2018-08-25   Tom 

因此,当我像下面这样读取数据时,它加载得很好

代码语言:javascript
复制
excel_file ='my path to a xlsx'
sheets_dict = pd.read_excel(excel_file, sheet_name=None)
full_table = pd.DataFrame()
for name, sheet in sheets_dict.items():
    sheet['SH_NAME'] = name
    sheet = sheet.rename(columns=lambda x: x.split('\n')[-1])
    full_table = full_table.append(sheet)
full_table.reset_index(inplace=True, drop=True)

打印

代码语言:javascript
复制
sheets_dict 

API_NUM看起来像是应该的,但full_table记录了这个数字。

但-this最终还是工作了--

代码语言:javascript
复制
full_table['API_NUM'] = full_table['API_NUM'].map(lambda x: '{:.0f}'.format(x))


           API_NUM        NAME         DATE_START DATE_FINISH  SH_NAME
0        1234567891    RAYES A - 1       2018-07-28  2018-08-25   Andy
1        123456789     RAYES A - 2       2018-07-28  2018-08-25   Mine
2        2345678909    RAYES A - 3       2018-07-28  2018-08-25   Shef
3        3456789060    RAYES A - 4       2018-07-28  2018-08-25   Mary
4        4567890122    RAYES A - 5       2018-07-28  2018-08-25   Tom 

当我将值转换为字符串时,它们类似于-2147483648

将df写出到csv时,该列的尾部0被丢弃。

问题是,在稍后的另一个函数中,我创建了这些值的字符串列表来执行sql查询。因此,稍后,它将如下所示:

代码语言:javascript
复制
myTableValue IN ('12345678910000', '12345678900000', '23456789090000', '34567890600000', '45678901220000') 

我对其运行查询的字段是一个字符串字段。

编辑:我相信lambda函数最终还是可以工作的,这是一个坏数据的例子,是我自己给了我问题。因此,该方法或下面的方法将起作用。对于想要使用Python将工作表合并到df中的用户来说,这可能很有帮助

EN

回答 1

Stack Overflow用户

发布于 2018-08-01 04:49:21

好吧,解决我自己的帖子。似乎起作用的是一种不同的加载worksheets.Now的方法我相信你们中的一位大师会知道为什么这种方法有效,而上面的方法不起作用,但对于任何想要使用它的人来说,这种方法无论如何都更简单。

代码语言:javascript
复制
import xlrd

excel = 'path to my file'
book = xlrd.open_workbook(excel)


# get a list of work sheet names
sheetlist = []
for sheet in book.sheet_names():
    sheetlist.append(sheet)

# create and ordered dict of the worksheets
dfs = pd.read_excel(excel, sheetname=sheetlist)

df = pd.concat((df.assign(source=sheet) for sheet, df in dfs.items()), ignore_index=True)
df['API_NUM'] = df['API_NUM'].astype(str)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51618354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档