在excel数据中读取pandas / python时指定数据类型

时间:2018-01-18 07:37:12

标签: python excel

我有一个

的excel文件
       gdp     gdp (2009)


1929   104.6   1056.7
1930   173.6   962.0
1931   72.3    846.6

我想在文件中读取并指定第一列(没有标题信息)是整数。我不需要B栏

我正在使用以下

阅读文件
import pandas as pd
from pandas import ExcelFile

gdp = pd.read_excel('gdpfile.xls, skiprows = 2, parse_cols = "A,C")

这读得很好,除了几年都变成花车,例如1929.0,1930.0,1931.0。前两行是NaN。

我想指定它应该是整数。我已按照Python pandas: how to specify data types when reading an Excel file?的建议尝试在converters = {"A":int,"C":float}命令中添加read_excel,但这并没有解决问题。

我尝试转换事实之后,我之前已经将字符串转换为float,但这也无效。

gdp.columns = ['Year','GDP 2009']
gdp['Year'] = gdp['Year'].astype(int)

我也尝试按照上述链接中的一条评论中的建议使用dtypes = int,但这也不起作用。

请注意skiprows是必要的,因为我的实际Excel文件顶部有几行我不想要。

1 个答案:

答案 0 :(得分:0)

根据此处给出的样本,标题后面有两个空白行。因此,如果您想要标题,您可以在范围内提供跳过行:

pd.read_excel("test.xls",parse_cols="A,C",skiprows=[1,2])

另外,请您确认该列中是否还有其他NaN细胞。如果列中有NaN值,则列dtype将提升为float。 请参阅以下链接: http://pandas.pydata.org/pandas-docs/stable/gotchas.html#support-for-integer-na

另请注意,由于未给出第一列标题,因此导入时会将第一列作为索引。 为避免这种情况,我遵循了以下步骤:

我的excel文件看起来像这样

    NaN       gdp   gdp (2009)
    NaN       NaN   NaN
    NaN       NaN   NaN
    1929    104.6   1056.7
    1930    173.6   962
    1931    72.3    846.6
    NaN     NaN     NaN
    1952    45.3    56.6

我删除了默认标头并添加了标头以避免索引问题:

 test = pd.read_excel("test.xls",skiprows=[0,3],header=None,names=['Year','gdp (2009)'],parse_cols="A,C")

如上所述,由于列包含NaN值,因此列类型将转换为float。您可以使用0或其他值来删除或填充na值。在这种情况下,我正在删除na行。

test = test.dropna(axis=0, how='all')

删除NaN值后,可以使用astype将其转换为int

test['Year']=test.Year.astype(int)

请检查这是否适合您,如果您需要更多说明,请与我们联系。 谢谢,