2015-06-02 23 views
9

Tôi có một tập tin dữ liệu, apples.csv, có tiêu đề như:Pandas gọi to_csv được thêm vào trước dấu phẩy

"id","str1","str2","str3","num1","num2" 

tôi đọc nó thành một dataframe với gấu trúc:

apples = pd.read_csv('apples.csv',delimiter=",",sep=r"\s+") 

Sau đó, tôi làm một số công cụ cho nó, nhưng bỏ qua đó (tôi có tất cả nhận xét ra, và các vấn đề tổng thể của tôi vẫn xảy ra, do đó, nói công cụ là không thích hợp ở đây).

tôi sau đó lưu nó ra:

apples.to_csv('bananas.csv',columns=["id","str1","str2","str3","num1","num2"]) 

Bây giờ, nhìn vào bananas.csv, tiêu đề của nó là:

,id,str1,str2,str3,num1,num2 

Không có thêm dấu ngoặc kép (mà tôi không thực sự quan tâm, như nó không ảnh hưởng đến bất kỳ thứ gì trong tệp) và sau đó là dấu phẩy hàng đầu. Các hàng tiếp theo hiện có cột bổ sung trong đó, vì vậy nó tiết kiệm được 7 cột. Nhưng nếu tôi làm:

print(len(apples.columns)) 

Ngay trước khi tiết kiệm, nó cho thấy 6 cột ...

Tôi thường trong Java/Perl/R, và ít kinh nghiệm với Python và đặc biệt là gấu trúc, vì vậy tôi không chắc chắn nếu điều này là "yeah, nó chỉ làm điều đó" hoặc những gì vấn đề là - nhưng tôi đã dành rất nhiều thời gian dài cố gắng để tìm ra điều này và không thể tìm thấy nó thông qua tìm kiếm.

Làm cách nào tôi có thể làm điều đó để không làm việc đó trước khi thêm dấu phẩy và có thể quan trọng - tại sao nó lại làm việc đó?

Trả lời

14

Set index=False (mặc định là True do vậy tại sao bạn nhìn thấy đầu ra này) để nó không lưu lại các giá trị chỉ số để csv của bạn, vui lòng xem docs

Vì vậy, đây:

df = pd.DataFrame({'a':np.arange(5), 'b':np.arange(5)}) 
df.to_csv(r'c:\data\t.csv') 

kết quả trong

,a,b 
0,0,0 
1,1,1 
2,2,2 
3,3,3 
4,4,4 

trong khi điều này:

df.to_csv(r'c:\data\t.csv', index=False) 

kết quả trong việc này:

a,b 
0,0 
1,1 
2,2 
3,3 
4,4 

Đó là cho tình hình nơi bạn có thể có một số giá trị chỉ số bạn muốn lưu

+0

Wow, phản ứng ngay lập tức và thông tin - cảm ơn bạn. Tôi đã đọc các tài liệu tại liên kết đó trước khi đến đây, nhưng giá trị đó và bộ mô tả dường như không chỉ ra những gì bạn mô tả khá tốt ở đây. Cảm ơn bạn rất nhiều vì đã làm rõ! – omgponies

+0

về việc trích dẫn, bạn có thể chuyển 'quoting = 1' để thêm dấu ngoặc kép xung quanh mọi thứ hoặc' quoting = 2' chỉ với giá trị str, mặc định là 'csv.QUOTE_MINIMAL' giống với' quoting = 3'. Nếu câu trả lời của tôi hoàn toàn giải quyết câu hỏi của bạn thì bạn có thể chấp nhận câu hỏi đó, sẽ có một dấu tích trống ở trên cùng bên trái câu trả lời của tôi, cảm ơn – EdChum

+0

Tôi chưa từng điều này xảy ra nhưng điều đó không có nghĩa là quá nhiều. Bạn có đặt tên cho các cột tương ứng trong khung dữ liệu không? Tôi không nhớ chỉ định tên cột khi viết thường chỉ làm điều này giả sử các cols đã được đặt tên chính xác: a.to_csv (f, header = True, index = False) –

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