2016-09-09 17 views
6

Tôi đã đọc tệp xlm sử dụng pandas.read_html và hoạt động gần như hoàn hảo, vấn đề là tệp có dấu phẩy là dấu phân cách thập phân thay vì dấu chấm (mặc định trong read_html).pandas.read_html không hỗ trợ dấu phẩy thập phân

Tôi có thể dễ dàng thay thế dấu phẩy bằng dấu chấm trong một tệp, nhưng tôi có gần 200 tệp với cấu hình đó. với pandas.read_csv bạn có thể xác định dấu tách thập phân, nhưng tôi không biết tại sao trong pandas.read_html bạn chỉ có thể xác định nghìn dấu phân cách.

bất kỳ hướng dẫn nào trong vấn đề này ?, có một cách khác để tự động hóa thay thế dấu phẩy/dấu chấm trước khi nó được mở bởi gấu trúc? cảm ơn trước!

+0

Vì vậy 1000,21 trong tập tin của bạn của bạn là 1000,21? – zhqiat

+0

@zhqiat thực sự là '1.000,21', nó cũng có nghìn dấu phân tách –

Trả lời

2

Thanks @zhqiat. Tôi nghĩ rằng việc nâng cấp pandas lên phiên bản 0.19 sẽ giải quyết được sự cố. tiếc là tôi không thể tìm thấy một cách dễ dàng để thực hiện điều đó. Tôi tìm thấy một hướng dẫn để nâng cấp Pandas nhưng đối với ubuntu (người dùng winXP).

cuối cùng tôi đã chọn cách giải quyết, sử dụng phương pháp gửi here, về cơ bản chuyển đổi tất cả các cột, từng người một, đến một số loại của pandas.Series

result[col] = result[col].apply(lambda x: x.str.replace(".","").str.replace(",",".")) 

Tôi biết rằng giải pháp này không phải là tốt nhất, nhưng công trinh. Cảm ơn

3

Nhìn vào mã nguồn của read_html

def read_html(io, match='.+', flavor=None, header=None, index_col=None, 
       skiprows=None, attrs=None, parse_dates=False, 
       tupleize_cols=False, thousands=',', encoding=None, 
       decimal='.', converters=None, na_values=None, 
       keep_default_na=True): 

Chức năng tiêu đề ngụ ý rằng có một tách số thập phân có sẵn trong lời gọi hàm.

Tiếp tục trong tài liệu này có vẻ như nó đã được thêm vào trong phiên bản 0.19 (do đó, xa hơn một chút so với nhánh thử nghiệm). Bạn có thể nâng cấp gấu trúc của mình không?

số thập phân: str, mặc định '.' Ký tự để nhận dạng dưới dạng dấu thập phân (ví dụ: sử dụng ',' cho dữ liệu Châu Âu ). .. versionadded :: 0.19.0

+0

ngay bây giờ Im sử dụng phiên bản ổn định cuối cùng (mặc định trong anaconda). tôi sẽ cố gắng nâng cấp lên 0,19 và xem có hiệu quả không. pd .__ version__ u'0.18.1 ' ngay khi tôi thử, tôi sẽ quay lại –

0

Tôi đang sử dụng gấu trúc 0,19 nhưng vẫn không thể chuyển đổi chính xác số.

Ví dụ:

a=pd.read_html(r.text,thousands='.',decimal=',') 

sẽ nhận ra giá trị "1.401,40" trong một ô trong bảng là 140.140 (float).

tôi sử dụng một giải pháp tương tự như 'Pablo A', chỉ cần chỉnh cho các giá trị nan:

def to_numeric_comma(series): 
    new=series.apply(lambda x: str(x).replace('.','').replace(',','.')) 
    new=pd.to_numeric(new.replace('nan',pd.np.nan)) 
    return new 
Các vấn đề liên quan