Grundsätzlich möchte ich einige Spalten löschen, die ich nicht brauche. Und ich bin irgendwie ratlos, warum das nicht funktioniert

import os
import pandas


def summarise(indir, outfile):
os.chdir(indir)
filelist = ".txt"
dflist = []
colnames = ["DSP Code", "Report Date", "Initial Date", "End Date", "Transaction Type", "Sale Type",
            "Distribution Channel", "Products Origin ID", "Product ID", "Artist", "Title", "Units Sold",
            "Retail Price", "Dealer Price", "Additional Revenue", "Warner Share", "Entity to be billed",
            "E retailer name", "E retailer Country", "End Consumer Country", "Price Code", "Currency Code"]
for filename in filelist:
    print(filename)
    df = pandas.read_csv('SYB_M_20171001_20171031.txt', header=None, encoding='utf-8', sep='\t', names=colnames,
                         skiprows=3)
    df['data_revenue'] = df['Units Sold'] * df['Dealer Price']  # Multiplying Units with Dealer price = Revenue
    df = df.sort_values(['End Consumer Country', 'Currency Code'])  # Sorts the columns alphabetically
    df.to_csv(outfile + r"\output.csv", index=None)
    dflist.append(filename)
    df.drop(columns='DSP Code')


summarise(r"O:\James Upson\Sound Track Your Brand Testing\SYB Test",
      r"O:\James Upson\Sound Track Your Brand Testing\SYB Test Formatted") 

Ich möchte alle Spaltentitel löschen, die Sie in colnames sehen können, mit Ausnahme von 'Units Sold', 'Dealer Price', 'End Consumer Country', 'Currency Code'. Ich habe versucht, eine Spalte mit df.drop(columns='DSP Code') zu entfernen, aber das scheint nicht zu funktionieren.

Jede Hilfe wäre sehr dankbar :)

1
James Upson 18 Jän. 2019 im 18:58

4 Antworten

Beste Antwort

Sie können es tun wie:

df.drop(['Col_1', 'col_2'], axis=1, inplace=True)

ODER:

df = df.drop(columns=colnames)

Wie im Kommentarbereich vorgeschlagen, verwenden Sie usecols, das eine Art Filter zum Reduzieren des Spaltenabschnitts bietet, um nur die zu verwendenden Restspalten zu verwenden. Dies sind keine Prozesse, und somit wird die Effizienz erhöht und der Ressourcenverbrauch wird ebenfalls geringer:

df = pandas.read_csv('SYB_M_20171001_20171031.txt', encoding='utf-8', sep='\t', usecols=["col1", "col2", "col3"],skiprows=3)
2
Karn Kumar 18 Jän. 2019 im 16:36
df.drop(columns='DSP Code')

Dieses Bit funktioniert nicht, weil Sie es keinem neuen df zuweisen

df = df.drop(columns='DSP Code')

Sie können die gewünschten Spalten auch einfach beibehalten, indem Sie sie in einen zweiten Datenrahmen kopieren.

1
ilamaaa 18 Jän. 2019 im 16:04

Mach einfach:

df = df['Units Sold', 'Dealer Price', 'End Consumer Country', 'Currency Code']

Sie behalten die, die Sie wollen, anstatt die anderen fallen zu lassen.

0
micric 18 Jän. 2019 im 16:28

Laut pandas.DataFrame.drop, Es wird ein Datenrahmen zurückgegeben, sofern Sie die Operation nicht direkt ausführen.

Rückgabe:
gelöscht: pandas.DataFrame

inplace: bool, Standardwert False

Wenn True, führen Sie den Vorgang an Ort und Stelle aus und geben Sie None zurück.

Führen Sie dies entweder an Ort und Stelle aus: df.drop(columns=['DSP Code'], inplace=True) oder speichern Sie den zurückgegebenen Datenrahmen: df=df.drop(columns=['DSP Code'])

0
Ricky Kim 18 Jän. 2019 im 16:06