2015-06-10 25 views
6

Kodumda bir hata alıyorum çünkü bir csv öğesinden bir öğe çağırarak bir veri çerçevesi oluşturmaya çalıştım. Bir dosyadan aradığım iki sütun var: CompanyName ve QualityIssue. Üç tür Kalite sorunu vardır: Ekipman Kalitesi, Kullanıcı ve Ne. Ben orada bir boşluk olduğu için açıkçası çalışmıyor çünkü bir veri çerçeve df.Equipment Kalite, yapmaya çalışıyorum sorunları içine koşmak. Ekipman Kalitesini orijinal dosyadan almak ve alanı bir alt çizgi ile değiştirmek istiyorum.Veri çerçevesi pythonunda boşluk kaldırma

girişi:

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') 

Bu sık soru sordum ve çözümleri çok çalıştı ama işe görünmüyordu gibi görünüyor:

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, 

İşte benim kodudur. İşte denedim budur:

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(" ", "_") 

Ve

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

Ve http://pandas.pydata.org/pandas-docs/stable/text.html buradan en umut verici ne düşündüm:

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

ama bu hata var: AttributeError: 'Endeks 'nesnenin hiçbir özelliği yoktur' str '

Yardımlarınız için şimdiden teşekkür ederiz!

+0

Bunu denediniz mi: formatted.columns = [x.strip(). ('', '_'), Biçimlendirilmiş.columns içinde x için değiştirin] –

+0

Bunu yapabilirsiniz df.columns = pd.Series (df .columns) .str.replace ('', '_') 'bir kenara niçin sadece 'df [' Ekipman Kalitesi ']' 'yi değil, her zaman çalışacak olan bir özellik olarak sütunlara erişmeye çalışmak yerine çalışacaksınız. 't? – EdChum

+0

@EdChum Evet! Bir yana sağ ol, çünkü sanırım bu etraftaki iş yerine gerçek bir soru olmalıydı. Sözdizimi konusunda emin değildim ama bu daha iyi çalıştı. – jenryb

cevap

6

Dene:

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

Sorunuzu anlamak gibi çalışmalıdır aşağıdaki (inplace=False olmadan test Eğer dikkatli olmak istiyorsanız öncelikle nasıl göründüğünü görmek için):

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

Ve sütun adlarını çevreleyen beyaz boşluk varsa, aşağıdaki gibi: "Bu örnekte şu şekilde:" Bu örnekte, "Bu örnekte,": hich, boşlukları sürükleyen/izleyen şeritler, sonra iç boşlukları "_" e dönüştürür.

İlgili konular