首页 > 解决方案 > 数据帧值预处理 - readexcel 在导入期间在值中删除撇号或在导入后将字符串转换为 int 值的其他方式

问题描述

我有一个具有以下数据格式的 excel 文件要导入数据框中。

我当前的代码允许我将图片中显示的确切行提取到数据框中。

df_gdp = pd.read_excel (open(gdp_path,'rb'), sheet_name='T2', skiprows= 5, skipfooter= 29)

下面是excel中的数据: 在此处输入图像描述

下面是我的数据框输出: 在此处输入图像描述

问题:上面显示的值是作为字符串导入的,开头和结尾的撇号不显示。

当我尝试使用以下方法将值转换为 int 时,它不起作用。

df_gdp.iloc[1:, 1] = df_gdp.iloc[1:, 0].str.replace("'", "").astype(float)

or

b1 = df_gdp.iloc[:, 54:61].values.astype(float)

ValueError:无法将字符串转换为浮点数:'384,870.3'

我可能在我的代码中遗漏了一些东西,我应该在导入期间早先在我的 readexcel 中添加一些东西,但我不知道该怎么做。

我查找了 readexcel 的 dtype 参数,但找不到有关如何声明特定范围的列以在导入期间转换为 int 的示例。我找到的示例如下所示:

pd.read_excel('tmp.xlsx', index_col=0, dtype={'Name': str, 'Value': float})  

我的数据有太多年被创建为单独声明的列,有出路吗?

转换后我想要的 numpy 数组输出如下(不是 ['69124.4' ....]):

[  69124.4   63585.4   51331.7  174596.4  183850.7 -107672.4   49833.8
  120578.6   40884.1  106405.   126586.1   94867.2   22184.3  100575.9
  110966.1   52548.9  243641.7]

标签: pythonpandasdataframe

解决方案


代替:

df_gdp.iloc[1:, 1] = df_gdp.iloc[1:, 0].str.replace("'", "").astype(float)

您必须使用:

lst = df_gdp.iloc[0,1:].to_list()
lst = [s.replace(',', '') for s in lst]
lst = [float(i) for i in lst]

现在 lst 是:[69124.4 63585.4 51331.7 174596.4 , ...]

适用于:

在此处输入图像描述


推荐阅读