2015-06-12 82 views
0

我在excel中有幾千行數據。然而,在一列中,只有每隔五行填滿。我想要做的是用上面的行中的數據填充每條填充行下面的四條空行。我有初學者對python的掌握,所以如果有人能夠引導我朝正確的方向發展,那將是一個很大的幫助。非常感謝。填寫excel中缺失的數據

+0

openpyxl可以幫助你。 –

+0

請使用建議的軟件包,或至少向我們提供您的數據樣本和您的代碼嘗試。 – Leb

回答

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

根據您的描述,這似乎很容易在Excel中要做到:

假設row 1包含列標題,並在row 2數據開始。如果column A包含您的值(從A2開始),則在單元格B2中使用公式=IF(ISBLANK(A2), B1, A2)並填充。如果該公式不爲空,則返回值A2,如果column A中的當前值爲空,則將返回column B中的先前值。

請注意,這要求每個組中的第一個單元格包含要填充的值。

甲後腳本一般參考:Excel有很難與從公式得到的空白單元格的,所以=""(或類似的東西=IFERROR(..., "")的結果)是不是空白,但確實有一個長度爲0。將ISBLANK(A2)更改爲LEN(A2)<1說明了這些情況。

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> 

熊貓據幀

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") 
... 
+0

非常感謝! –