将Excel文件读取到dataframe并将最后一个非空列值复制到空单元格

2024-09-27 09:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Excel表读取到数据框中。该表包含一些在数据框中显示为空白的空单元格。我希望这些空单元格用相同列中的最后一个设置值(位于空单元格之前)填充。我可以用三行代码来完成这项工作,它们基本上可以完成这项工作,但看起来有点麻烦。我想知道是否有更准确的方法?至少在read_excel中设置键以将空单元格转换为NA

代码:

import pandas as pd
import numpy as np

df = pd.read_excel(r'C:\Users\test\play.xlsm', sheet_name = 'C.1',
                   skiprows = 11, nrows = 52, usecols = 'B:I', header = None, na_values = r'^\s*$')

df = df.replace(r'^\s*$', np.nan, regex=True)
df[1] = pd.Series(df[1]).fillna(method='ffill')

print(df.head(20))

原始数据帧

10  iC5          i-Pentane   1.205  0.553   1.243   3.350   1.238   2.118
11  nC5          n-Pentane   1.787  0.821   1.331   3.587   1.385   2.368
12   C6            Hexanes   4.946  2.714   1.317   4.207   1.738   3.549
13        Me-Cyclo-pentane   1.471  0.788   0.235   0.739   0.381   0.761
14                 Benzene   0.126  0.063   0.021   0.062   0.034   0.062
15            Cyclo-hexane   2.487  1.332   0.428   1.347   0.672   1.340
16   C7           Heptanes   7.109  4.534   0.475   1.768   1.258   2.987
17         Me-Cyclo-hexane   6.220  3.888   0.374   1.372   1.066   2.481
18                 Toluene   1.286  0.754   0.065   0.225   0.210   0.458
19   C8            Octanes  10.151  7.381   0.235   0.997   1.407   3.810

我需要获取的数据帧:

10  iC5          i-Pentane   1.205  0.553   1.243   3.350   1.238   2.118
11  nC5          n-Pentane   1.787  0.821   1.331   3.587   1.385   2.368
12   C6            Hexanes   4.946  2.714   1.317   4.207   1.738   3.549
13   C6   Me-Cyclo-pentane   1.471  0.788   0.235   0.739   0.381   0.761
14   C6            Benzene   0.126  0.063   0.021   0.062   0.034   0.062
15   C6       Cyclo-hexane   2.487  1.332   0.428   1.347   0.672   1.340
16   C7           Heptanes   7.109  4.534   0.475   1.768   1.258   2.987
17   C7    Me-Cyclo-hexane   6.220  3.888   0.374   1.372   1.066   2.481
18   C7            Toluene   1.286  0.754   0.065   0.225   0.210   0.458
19   C8            Octanes  10.151  7.381   0.235   0.997   1.407   3.810

同样,代码可以工作,但看起来很难看。我想知道是否有办法使正则表达式在“na_values”键中工作


Tags: 数据代码importdfreadasnpexcel
1条回答
网友
1楼 · 发布于 2024-09-27 09:30:37

如果需要一行解决方案Series构造函数是不必要的,则replace仅用于此列,最后一行可以使用ffill用于.fillna(method='ffill')的shorcut:

df[1] = df[1].replace(r'^\s*$', np.nan, regex=True).ffill()

相关问题 更多 >

    热门问题