2015-06-10 11 views
6

Ho ricevuto un errore nel mio codice perché ho provato a creare un dataframe chiamando un elemento da un csv. Ho due colonne che chiamo da un file: CompanyName e QualityIssue. Esistono tre tipi di problemi di qualità: Qualità dell'apparecchiatura, Utente e Nessuno dei due. Mi imbatto in problemi nel tentativo di rendere un dataframe df.Qualità di equipaggiamento, che ovviamente non funziona perché c'è uno spazio lì. Voglio prendere la qualità delle attrezzature dal file originale e sostituire lo spazio con un trattino basso.Rimozione dello spazio in python dataframe

ingresso:

Top Calling Customers,   Equipment Quality, User, Neither, 
Customer 3,      2,   2,  0, 
Customer 1,      0,   2,  1, 
Customer 2,      0,   1,  0, 
Customer 4,      0,   1,  0, 

Ecco il mio codice:

import numpy as np 
import pandas as pd 
import pandas.util.testing as tm; tm.N = 3 

# Get the data. 
data = pd.DataFrame.from_csv('MYDATA.csv') 
# Group the data by calling CompanyName and QualityIssue columns. 
byqualityissue = data.groupby(["CompanyName", "QualityIssue"]).size() 
# Make a pandas dataframe of the grouped data. 
df = pd.DataFrame(byqualityissue) 
# Change the formatting of the data to match what I want SpiderPlot to read. 
formatted = df.unstack(level=-1)[0] 
# Replace NaN values with zero. 
formatted[np.isnan(formatted)] = 0 
includingtotals = pd.concat([formatted,pd.DataFrame(formatted.sum(axis=1), 
          columns=['Total'])], axis=1) 
sortedtotal = includingtotals.sort_index(by=['Total'], ascending=[False]) 
sortedtotal.to_csv('byqualityissue.csv') 

Questo sembra essere una domanda frequente e ho provato un sacco di soluzioni, ma non sembra funzionare. Ecco quello che ho provato:

with open('byqualityissue.csv', 'r') as f: 
    reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE) 
    return [[x.strip() for x in row] for row in reader] 
    sentence.replace(" ", "_") 

E

sortedtotal['QualityIssue'] = sortedtotal['QualityIssue'].map(lambda x: x.rstrip(' ')) 

E quello che ho pensato è stato il più promettente da qui http://pandas.pydata.org/pandas-docs/stable/text.html:

formatted.columns = formatted.columns.str.strip().str.replace(' ', '_') 

ma ho ottenuto questo errore: AttributeError: 'Index 'oggetto non ha attributo' str '

Grazie per il vostro aiuto in anticipo!

+0

Hai provato: formatted.columns = [x.strip(). Replace ('', '_') per x in formatted.columns] –

+0

Puoi fare 'df.columns = pd.Series (df .columns) .str.replace ('', '_') 'a parte perché non stai solo facendo' df ['Equipment Quality'] 'che funzionerà sempre piuttosto che provare ad accedere alle colonne come un attributo che ha vinto 't? – EdChum

+0

@EdChum Sì! Grazie per il lato, perché suppongo che avrebbe dovuto essere la vera domanda piuttosto che il lavoro intorno. Non ero sicuro della sintassi, ma funzionava meglio. – jenryb

risposta

6

Prova:

formatted.columns = [x.strip().replace(' ', '_') for x in formatted.columns] 
3

Come ho capito la tua domanda, il seguente dovrebbe funzionare (provarlo con inplace=False per vedere come appare prima se si vuole stare attenti):

sortedtotal.rename(columns=lambda x: x.replace(" ", "_"), inplace=True) 

E se hai uno spazio bianco che circonda i nomi delle colonne, ad esempio: "Questo esempio"

sortedtotal.rename(columns=lambda x: x.strip().replace(" ", "_"), inplace=True) 

w che rimuove lo spazio bianco iniziale/finale, quindi converte gli spazi interni in "_".

Problemi correlati