Việc hiểu danh sách rất tốt. Nhưng một số loại "... Tham gia ..." sẽ rất hữu ích. Cảm ơn. Ví dụ như vậy. Tôi có một bộ A = {1,0}, một danh sách B = [[1,1], [2,3]]. Tôi muốn tìm tất cả các hàng trong B, nơi colomu thứ hai là một trong các giá trị trong A. Hoặc một số điều tổng quát hơn, tôi có 2 tệp CSV. Tôi muốn tìm hiểu tất cả các hàng mà các giá trị của một số dấu hai chấm từ hai tập tin phù hợp. Cũng giống như một số loại 'tham gia' của hai tập tin. Một trong các tệp là kích thước GB. sqldf is "SQL select on R data frames."Có một mô-đun trong Python thực hiện điều gì đó như "sqldf" cho R?
Trả lời
tôi không biết gì về một thư viện làm những gì bạn yêu cầu (nhưng tôi chỉ liếc nhìn tài liệu sqldf
) Tuy nhiên không có gì về những gì bạn hỏi thực sự đòi hỏi một thư viện, họ là một lớp lót trong python (và bạn có thể tất nhiên là trừu tượng chức năng tạo ra một chức năng hơn là một sự hiểu biết danh sách đơn giản ...)
Đặt A = {1,0}, danh sách B = [[1,1], [2,3]] . Tôi muốn tìm tất cả các hàng trong B nơi cột thứ hai là một trong những giá trị trong A.
>>> a = set([1, 0])
>>> b = [[1,1],[2,3]]
>>> [l for l in b if l[1] in a]
[[1, 1]]
Tôi có 2 file CSV. Tôi muốn tìm hiểu tất cả các hàng trong đó các giá trị của một số cột từ hai tệp phù hợp.
>>> f1 = [[1, 2, 3], [4, 5, 6]]
>>> f2 = [[0, 2, 8], [7, 7, 7]]
>>> [tuple_ for tuple_ in zip(f1, f2) if tuple_[0][1] == tuple_[1][1]]
[([1, 2, 3], [0, 2, 8])]
EDIT: Nếu sử dụng bộ nhớ là một vấn đề, bạn nên sử dụng máy phát điện thay vì danh sách. Ví dụ:
>>> zip(f1, f2)
[([1, 2, 3], [0, 2, 8]), ([4, 5, 6], [7, 7, 7])]
nhưng sử dụng máy phát điện:
>>> import itertools as it
>>> gen = it.izip(f1, f2)
>>> gen
<itertools.izip object at 0x1f24ab8>
>>> next(gen)
([1, 2, 3], [0, 2, 8])
>>> next(gen)
([4, 5, 6], [7, 7, 7])
Và đối với các nguồn dữ liệu:
>>> [line for line in f1]
[[1, 2, 3], [4, 5, 6]]
dịch như phát như:
>>> gen = (line for line in f1)
>>> gen
<generator object <genexpr> at 0x1f159b0>
>>> next(gen)
[1, 2, 3]
>>> next(gen)
[4, 5, 6]
Cảm ơn @mac. Bạn nói đúng, việc hiểu danh sách tương tự như SQL, nếu bạn không xử lý các tệp lớn không thể đọc được trong bộ nhớ một lần. Tôi sẽ rất vui nếu tôi làm như vậy với các tệp CSV lớn. – gstar2002
@ gstar2002 - Không có gì ngăn cản bạn sử dụng cú pháp này với các trình tạo thay vì danh sách. Xem chỉnh sửa. – mac
cảm ơn, nó hoạt động cho izip. Nhưng đối với những thứ như ([l1, l2] đối với l1 trong f1 cho l2 trong f2), nó không hoạt động. Tôi chỉ nhận được dòng đầu tiên của f1 kết hợp với tất cả các dòng từ f2. Nhưng tôi muốn có tất cả các kết hợp. – gstar2002
Trước khi bạn có thể làm các chức năng của sqldf bạn cần func tionality của 'df', tức là dataframes. Python có một phiên bản nâng niu: gấu trúc:
http://pandas.sourceforge.net/
Có lẽ phần tham gia và sáp nhập sẽ giúp:
http://pandas.sourceforge.net/merging.html
tôi khuyên bạn nên bắt đầu với một cái gì đó nhỏ hơn file gigabyte của bạn mặc dù!
Bạn có thể sử dụng pandasql, cho phép truy vấn theo kiểu SQL của khung dữ liệu gấu trúc. Nó rất giống với sqldf.
https://github.com/yhat/pandasql/
(đầy đủ từ chối trách nhiệm, tôi đã viết nó)
EDIT: bài viết trên blog ghi lại một số tính năng tìm thấy ở đây: http://blog.yhathq.com/posts/pandasql-sql-for-pandas-dataframes.html
- 1. Có điều gì đó trong Python tương tự như quantstrat trong R?
- 2. Có điều gì đó giống như Codecademy cho Java
- 3. Làm cách nào tôi có thể thực hiện điều gì đó như find_in_batches_by_sql trong Rails
- 4. Một cái gì đó như tăng :: multi_index cho Python
- 5. Có điều gì đó giống như bpython cho Ruby không?
- 6. Có điều gì đó giống như trang trí python cho C#?
- 7. Có điều gì đó giống như __LINE__ trong Verilog không?
- 8. Có điều gì cho Python giống như readability.js không?
- 9. Có điều gì đó giống như find_if trong Java không?
- 10. Sử dụng tính năng đọc danh sách bằng Python để thực hiện điều gì đó tương tự như zip()?
- 11. Có cái gì đó giống như Python 'với' trong C#?
- 12. Gọi hàm R từ truy vấn sqldf
- 13. MATLAB Có một cái gì đó giống như danh sách hiểu như nó là trong python?
- 14. jQuery Mobile - Thực hiện điều gì đó khi tải trang
- 15. Có cái gì đó giống như Incanter cho Haskell?
- 16. Có điều gì đó như là 'quá trừu tượng' không?
- 17. Trong đó có cái gì đó tương tự như Thread.yield của Java() bằng Python? Điều đó thậm chí có ý nghĩa không?
- 18. điều gì đó giống như dấu ngoặc kép của python trong F # (hoặc C#)?
- 19. Điều gì đó tương tự như java.util trong Javascript?
- 20. bind_param thực hiện điều gì?
- 21. Có thể thực hiện điều gì đó khi chương trình Java thoát đột ngột không?
- 22. Có cái gì đó giống như WMI cho Linux?
- 23. Có cái gì đó giống như `last` cho` map`?
- 24. Có điều gì đó giống như ZenTest/Autotest cho Java và JUnit
- 25. Làm cách nào để chuyển biến R thành sqldf?
- 26. Điều gì đó tương tự như SimpleXML của PHP bằng Python?
- 27. Python: Tôi có thiếu gì đó không?
- 28. Có điều gì đó giống như Snoop (WPF) hoặc FireBug (ASP.NET) cho Windows Forms không?
- 29. Có điều gì đó tương tự như mini-mvc-profiler cho Java không?
- 30. Có điều gì đó hoạt động như .wait() và .notify() trong môi trường EJB không?
Bạn sẽ nhận được nhiều hơn/câu trả lời tốt hơn nếu bạn có một ngắn gọn tóm tắt về những gì 'sqldf' làm cho người dùng không phải R. Chính xác những phần chức năng của nó mà bạn muốn? –
Đồng ý ... Ngoài ra, một số mã hoặc ít nhất một số mã giả để giải thích những gì bạn đang cố gắng làm sẽ hữu ích. –