pandas数据框:保存并读取Excel表格| 将整数作为string处理

我有一个pandas数据框(df)。

df有很多列和行,其中很多是整数。

我的意图是将数据框保存为excel文件,并在保持数据完整性的同时再次读取。

我正在使用以下步骤。

保存到excel中:

writer = pd.ExcelWriter("myExcelFile.xlsx") df.to_excel(writer, 'sheet_name') writer.save() 

从excel中读取:

 import glob files = glob.glob("myExcelFile*.xlsx") #gives list of files myFile = files[0] df = pd.read_excel(myFile , sheetname='sheet_name', convert_float=True) 

请注意选项“ convert_float ”。 据说,excel以浮点格式保存所有数字。 所以这个选项应该有助于将所有的浮点值转换为可能的整数。

例如,1.0 – > 1。

我的要求是获取我打算保存在Excel表格中的原始整数值,并在稍后检索。 但是,这不起作用的原因。 我在哪里错了?

有没有办法,我可以处理,在保存到Excel中?

我试图解决这个问题,通过将整数变为string,在Excel中存储string,从Excel中读取string,重新转换为整数。 但是,我和我的应用程序的痛苦是太严重: – /

我无法复制你的问题。 它似乎为我工作正常:

 import pandas as pd df = pd.DataFrame({'Floats': [10.1, 20.2, 30.3, 20.0, 15.9, 30.1, 45.0], 'Integers': [10.0, 20.0, 30, 20, 15, 30, 45]}) filename = 'df.xlsx' writer = pd.ExcelWriter(filename) df.to_excel(writer) writer.save() df = pd.read_excel(filename, convert_float=True) print df 

结果:

  Floats Integers 0 10.1 10 1 20.2 20 2 30.3 30 3 20.0 20 4 15.9 15 5 30.1 30 6 45.0 45 

当你运行这个代码时,你会得到相同的结果吗? 如果是的话,那么一定还有其他的事情要做。 你能给我们提供certificate问题的代码吗?

请注意,每个至less有一个浮点的列将使整个列被视为浮点数,因为在给定列中通常不会有多个数据types(请参阅下面有关object列types的内容)。

一个解决方法,如果上述代码由于某种原因不起作用,将强制某些列和/或索引手动为整数,如下所示:

 df = pd.read_excel(filename) # convert_float=False by default df['Integers'] = df['Integers'].astype(int) df.index = df.index.astype(int) print df 

你可以强制所有的列是像这样的整数:

 df = pd.read_excel(filename).astype(int) 

在OP之后编辑更多细节:

如果您知道哪些列需要作为string对待,则可以使用与上面相同的手动技术:

 df['Strings'] = df['Strings'].astype(str) 

但是你希望它更自动化。 这是hacky,但它的作品。 如果你在数据的末尾添加一个虚拟的string,比如'dummy' ,那么pandas将把列作为对象,每个元素都有自己的数据types。 没有虚拟string,它不起作用。 您可以尝试在我的代码中看到注释掉的数据框。

 import pandas as pd # This works. df = pd.DataFrame({'Floats': [10.1, 20.2, 30.3, 20.0, 15.9, 30.1, 0], 'Objects': ['10.0', 20.0, 30.5, 20, 15, 30, 'dummy']}) # This doesn't work. # df = pd.DataFrame({'Floats': [10.1, 20.2, 30.3, 20.0, 15.9, 30.1], # 'Objects': ['10.0', 20.0, 30.5, 20, 15, 30]}) filename = 'df.xlsx' writer = pd.ExcelWriter(filename) df.to_excel(writer) writer.save() # Remove the dummy row. df = pd.read_excel(filename)[:-1] print df print print df.dtypes print print df.loc[0, 'Objects'], type(df.loc[0, 'Objects']) print df.loc[1, 'Objects'], type(df.loc[1, 'Objects']) print df.loc[2, 'Objects'], type(df.loc[2, 'Objects']) print df.loc[3, 'Objects'], type(df.loc[3, 'Objects']) 

结果:

  Floats Objects 0 10.1 10.0 1 20.2 20 2 30.3 30.5 3 20.0 20 4 15.9 15 5 30.1 30 Floats float64 Objects object dtype: object 10.0 <type 'unicode'> 20 <type 'int'> 30.5 <type 'float'> 20 <type 'int'>