填写excel中缺少的数据

时间:2015-06-12 19:39:00

标签: python excel

我在excel中有几千行数据。但是,在一列中,只填充了每五行。我想要做的是用上面一行中的数据填充每条填充线下面的四条空行。我有一个初学者对蟒蛇的掌握,所以如果有人能指引我朝着正确的方向前进,那将是一个很大的帮助。非常感谢。

3 个答案:

答案 0 :(得分:2)

根据您的描述,这在Excel中似乎很容易做到:

假设row 1包含列标题,数据从row 2开始。如果column A包含您的值(从A2开始),则在单元格B2中使用公式=IF(ISBLANK(A2), B1, A2)并填写。如果A2不为空,则此公式将返回column B的值,如果column A中的当前值为空,则会返回=""中的上一个值。

请注意,这要求每个组中的第一个单元格包含您要填充的值。

用于一般参考的后脚本:Excel很难通过公式生成空白单元格,因此公式 =IFERROR(..., "")(或ISBLANK(A2)之类的结果)不是空白,但长度为0.将LEN(A2)<1更改为{{1}}说明这些情况。

答案 1 :(得分:1)

使用vba应该是一个简单的解决方法(尽管你甚至可以用创建的列和Excel公式做类似的事情):

Sub FillIn()
    Dim intLast As Integer, intColumn As Integer
    intLast = 100 'your last row'
    intColumn = 5 'the column missing data'
    For i = 2 To intLast 'assume 2 because of headers'
        If IsEmpty(Cells(i, intColumn)) Then Cells(i, intColumn).Value = Cells(i - 1, intColumn).Value
    Next i
End Sub  

只需将intLast和intColumn值替换为您的值。

答案 2 :(得分:1)

使用Python完成更新Excel数据有多种方法:

CSV模块

将Excel数据另存为csv。使用csv module作为元组,列表或字典导入Python。然后,遍历列表的项目,然后添加所需的数据。

#!/usr/bin/python
import csv

with open('C:\Path\To\ExcelDataFile.csv', 'rt') as csvfile:
    csvReader = csv.reader(csvfile)
    data = []
    for row in csvReader:
         data.extend(row)

    for i in range(0, len(data)):
         if data[i][colnum] != None:
             data[i + 1][colnum] = <somevalue>   
             data[i + 2][colnum] = <somevalue>
             data[i + 3][colnum] = <somevalue>
             data[i + 4][colnum] = <somevalue>

Pandas数据框

将Excel数据导入Python pandas library数据框。然后,按索引搜索特定行,然后添加所需数据。

#!/usr/bin/python
import pandas as pd

df = pd.read_excel('C:\Path\ToExcel\DataFile.xlsx', 'ExcelSheetName')
for i, row in df.iterrows()
    if df.loc[i, colnum] != None :
       df.loc[i + 1, column] = <somevalue>     
       df.loc[i + 2, colnum] = <somevalue>
       df.loc[i + 3, colnum] = <somevalue>
       df.loc[i + 4, colnum] = <somevalue>

Excel宏

编写Excel宏以根据需要清理数据,并让Python在导入之前运行宏。或者只需在Excel中运行宏,并使用上述选项将最终数据导入Python。

#!/usr/bin/python
import os
import win32com.client

xl=win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(Filename="C:\Path\ToMacroEnabled\ExcelData.xlsm")
xl.Application.Run("ExcelData.xlsm!macroname.macroname")
...