2017-08-09 1 views
-2

ich Python ziemlich neu bin und ich versuche, die folgendes zu tun:Wie zu lesen und zu bearbeiten Excel-Dateien mit Python

Ich habe eine Excel-Datenblatt mit zwei Spalten. Der erste enthält den Namen und der zweite die Daten. Wenn ich einen Namen für das Programm habe, muss dieser Name in der Tabelle gefunden werden. Verschieben Sie eine Zelle nach rechts (nächste Spalte), um den Wert zu lesen. Danach habe ich eine kleine Formel, die den Wert ändert, und dann möchte ich diese Daten in derselben Zelle speichern, aus der sie stammt.

Danach beginnt es wieder von vorne.

Jetzt weiß ich, dass ich xlsxwriter für diesen Job verwenden muss, aber ich bin nicht in der Lage, mit dem richtigen Code zu kommen. Ich fand diese Seite: https://www.datacamp.com/community/tutorials/python-excel-tutorial#gs.WWHel8Q aber es ist nicht ganz das, was ich suche. Ich bitte Sie nicht, mir einen Code zu geben, aber könnten Sie mir in die richtige Richtung helfen? (Tatsächlich schreibe ich den Code eher selbst, weil es eine gute Möglichkeit ist, Python einfach zu lernen).

Vielen Dank im Voraus!

Edit:

import pandas as pd 

df = pd.read_excel('Test.xlsx') 
writer = pd.ExcelWriter('Test.xlsx') 
df = pd.DataFrame(
    {"Name" :['A' ,'B', 'C', 'D', 'E', 'F'], 
    "Value" :[1 ,2 ,3 ,4 ,5 ,6]}, 
    ) 
df.to_excel(writer,'Main_sheet') 
value = df.loc[lambda df: df.Name == 'D',:] 
p = value.Value + 50 
print(value) 
print(p) 
df.set_value(value.index, 'Name', 10) 

writer.save() 

ich das jetzt. Aber es funktioniert nicht, der Wert für D bleibt 4. Warum ist das so?

+1

Hallo, und willkommen zu Stack Overflow. Ich weiß es zu schätzen, dass Sie nicht darum bitten, dass jemand Code für Sie schreibt. Ihre Frage entspricht jedoch immer noch nicht den Community-Richtlinien in [ask]. Stack Overflow ist mehr für die Unterstützung bei bestimmten Codierungsproblemen. Eine effektivere und akzeptierte Art zu fragen wäre, das Problem selbst zu versuchen und dann, wenn es einen bestimmten Teil gibt, den du nicht verstehst, oder Fehler, die du nicht durchstehen kannst, danach fragen. Das hilft Ihnen sowohl zu lernen, was Sie selbst tun können, als auch uns herauszufordern, kreativere Antworten zu finden als "Look here". –

+0

Es tut mir leid, ich hatte gehofft, dass jemand mich in die richtige Richtung führen könnte. Genau wie Andrey mit seiner Antwort über Pandas, die wirklich hilfreich ist, btw –

Antwort

0

Ich denke, Sie sollten Pandas versuchen. Sie können die gesamte Tabelle lesen und Operationen darauf ausführen. Es ist nicht schwierig, Pandas zu lernen, aber es ist sehr nützlich.

http://pandas.pydata.org/

können Sie so etwas wie dies zu tun:

df = pd.read_excel('filename') 
df.loc[df.col1 == 'name', col2] = formula 

Zuerst Sie die Datei lesen. Dann finden Sie einen Wert in der ersten Spalte und ändern den Wert in dieser Zeile in der zweiten Spalte.

UPD:

Hier ist die Lösung für Ihren Fall. Wie gesagt, Sie können den Wert im Datenrahmen direkt ändern. Der Code findet eine Zeile mit 'D' in der Spalte 'Name' und addiert 50 zum Wert in der Spalte 'Wert'.

df = pd.DataFrame(
    {"Name" :['A' ,'B', 'C', 'D', 'E', 'F'], 
    "Value" :[1 ,2 ,3 ,4 ,5 ,6]}, 
    ) 

df.loc[df.Name == 'D', 'Value'] += 50 

df 
Name Value 
0 A 1 
1 B 2 
2 C 3 
3 D 54 
4 E 5 
5 F 6 

df.to_excel('Test.xlsx') 
+0

hmmm ich kann es nicht zur Arbeit bekommen.Ich habe versucht, Ihre Zeile, aber ich habe einen Fehler für col1. Also habe ich etwas anderes versucht (siehe editierter Beitrag), was immer noch nicht funktioniert, haha. Es ist manchmal so frustrierend. –

+0

Ich habe meine Antwort mit einer Lösung aktualisiert. –

0

kommt es vor, ich habe eine Funktion Earlies schrieb mit openpyxl

import openpyxl 
import os 


def load_FromExcel(filepath, total_row = 999999999999): 
    """Using module "openpyxl" to load data from excel file(only support '.xlsx' format) 

    Make sure you already install "openpyxl". 
    :param filepath: 
     Source file should be put under the path beneath the file which is calling this method. 
     Otherwise you'll have to change some code inside. 
    :return: 
     list_row is a list consists of list records. 
     For example, list_row[0] is a list consists of these cell in 1st row. 
     Therefore, use list_row[0][0] represent the value in 1st column in 1st row(A1). 
    """ 
    filename = os.path.join(os.path.dirname(__file__) + "/../" + filepath) 
    # Use "os.path.dirname(__file__)" to get a relevant path 
    print(filename) 
    # Open a workbook by name= filename in READ-ONLY mode 
    wb = openpyxl.load_workbook(filename, read_only=True) 
    # Select this worksheet 
    sheet = wb.get_active_sheet() 
    sheet_rows = tuple(sheet.rows) 
    # This is the total amount of rows in the excel file opened 
    row_count = len(sheet_rows) 
    print(row_count) 
    row_count = 0 
    list_row = [] 
    for row in sheet.rows: 
     row_count += 1 
     temp_list = [] 
     for cell in row: 
      # print(cell.value,end=',') 
      temp_list.append(cell.value) 
     list_row.append(temp_list) 
     if row_count > total_row: 
      break 
    print("Loading Complete") 
    return list_row 

und bitte halten Sie sich zu reinigen, was Sie Codierung, bevor Sie Ihre Codes.

Verwandte Themen