2015-06-10 3 views
6

Я получаю сообщение об ошибке в моем коде, потому что я попытался сделать dataframe, вызвав элемент из csv. У меня есть два столбца, которые я вызываю из файла: CompanyName и QualityIssue. Существует три типа вопросов качества: качество оборудования, пользователь и ни один из них. Я сталкиваюсь с проблемами, которые пытаются сделать dataframe df.Equipment Quality, что явно не работает, потому что там есть место. Я хочу взять качество оборудования из исходного файла и заменить пробел знаком подчеркивания.Удаление пространства в dataframe python

вход:

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, 

Вот мой код:

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

Это, кажется, часто задаваемый вопрос, и я пробовал много решений, но они, похоже, не работает. Вот то, что я пробовал:

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

И

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

И то, что я считал наиболее перспективным здесь http://pandas.pydata.org/pandas-docs/stable/text.html:

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

, но я получил эту ошибку: AttributeError: «Index 'объект не имеет атрибута' str '

Спасибо за вашу помощь заранее!

+0

Вы пытаетесь это сделать: formatted.columns = [x.strip(). Заменить ('', '_') для x в formatted.columns] –

+0

Вы можете сделать 'df.columns = pd.Series (df .columns) .str.replace ('', '_') 'в стороне, почему вы не просто выполняете' df ['Equipment Quality'] ', который всегда будет работать, а не пытается получить доступ к столбцам в качестве атрибута, который выиграл «т? – EdChum

+0

@EdChum Да! Спасибо за это, потому что я предполагаю, что это должен был быть реальный вопрос, а не работа. Я не был уверен в синтаксисе, но это сработало лучше. – jenryb

ответ

6

Try:

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

Как я понимаю ваш вопрос, должно работать (проверить его с inplace=False, чтобы увидеть, как это выглядит, если вы хотите быть осторожным):

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

И если у вас есть пробелы вокруг названий столбцов, например: «Этот пример»

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

w hich strip ведет/завершает пробелы, затем преобразует внутренние пробелы в «_».