2015-06-10 14 views
6

Tôi gặp lỗi trong mã của mình vì tôi đã cố tạo một khung dữ liệu bằng cách gọi một phần tử từ csv. Tôi có hai cột tôi gọi từ một tệp: CompanyName và QualityIssue. Có ba loại vấn đề về Chất lượng: Chất lượng Thiết bị, Người dùng và Không. Tôi chạy vào các vấn đề cố gắng để làm cho một dataframe df.Equipment chất lượng, mà rõ ràng là không làm việc vì có một không gian đó. Tôi muốn lấy Chất lượng thiết bị từ tệp gốc và thay thế khoảng trắng bằng dấu gạch dưới.Xóa không gian trong python dataframe

đầu vào:

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, 

Đây là mã của tô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') 

này có vẻ là một câu hỏi thường gặp và tôi đã cố gắng rất nhiều trong những giải pháp nhưng họ dường như không làm việc. Đây là những gì tôi đã cố gắng:

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

Và những gì tôi nghĩ là hứa hẹn nhất từ ​​đây http://pandas.pydata.org/pandas-docs/stable/text.html:

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

nhưng tôi đã nhận lỗi này: AttributeError: 'Index 'đối tượng không có thuộc tính' str '

Cảm ơn sự giúp đỡ của bạn trước!

+0

Bạn đã thử cách này: formatted.columns = [x.strip(). Thay thế ('', '_') cho x trong định dạng.columns] –

+0

Bạn có thể làm 'df.columns = pd.Series (df .columns .str.replace ('', '_') 'là một lý do tại sao bạn không chỉ làm' df ['Chất lượng Thiết bị'] 'sẽ luôn hoạt động hơn là cố gắng truy cập các cột như một thuộc tính đã thắng 't? – EdChum

+0

@EdChum Có! Cảm ơn vì đã qua một bên, bởi vì tôi đoán đó nên là câu hỏi thực sự chứ không phải là công việc xung quanh. Tôi đã không chắc chắn về cú pháp, nhưng điều đó làm việc tốt hơn. – jenryb

Trả lời

6

Hãy thử:

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

Như tôi hiểu câu hỏi của bạn, sau đây nên làm việc (kiểm tra nó ra với inplace=False để xem làm thế nào nó trông giống đầu tiên nếu bạn muốn cẩn thận):

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

Và nếu bạn có khoảng trắng bao quanh các tên cột, như: "Ví dụ này"

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

w hich dải khoảng trắng đầu/cuối, sau đó chuyển đổi không gian nội bộ thành "_".

Các vấn đề liên quan