Đọc nhiều tệp trong python bằng vòng lặp for
Chúng ta có thể sử dụng vòng lặp import glob print('all csv files in data directory:', glob.glob('data/*.csv'))1 để đọc một tập hợp các tệp dữ liệu và thực hiện một thao tác cho từng tệp. Trong trường hợp này, chúng tôi sẽ in giá trị tối thiểu trong mỗi tệp Show
import pandas as pd data_files = ['data/gapminder_gdp_africa.csv', 'data/gapminder_gdp_asia.csv'] for filename in data_files: data = pd.read_csv(filename, index_col='country') print(filename, data.min()) data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212 gdpPercap_1957 335.997115 gdpPercap_1962 355.203227 gdpPercap_1967 412.977514 gdpPercap_1972 464.099504 gdpPercap_1977 502.319733 gdpPercap_1982 462.211415 gdpPercap_1987 389.876185 gdpPercap_1992 410.896824 gdpPercap_1997 312.188423 gdpPercap_2002 241.165876 gdpPercap_2007 277.551859 dtype: float64 data/gapminder_gdp_asia.csv gdpPercap_1952 331.0 gdpPercap_1957 350.0 gdpPercap_1962 388.0 gdpPercap_1967 349.0 gdpPercap_1972 357.0 gdpPercap_1977 371.0 gdpPercap_1982 424.0 gdpPercap_1987 385.0 gdpPercap_1992 347.0 gdpPercap_1997 415.0 gdpPercap_2002 611.0 gdpPercap_2007 944.0 dtype: float64 Sử dụng để tìm các tập hợp tệp có tên khớp với một mẫu
import glob print('all csv files in data directory:', glob.glob('data/*.csv')) all csv files in data directory: ['data/gapminder_gdp_americas.csv', 'data/gapminder_gdp_europe.csv', 'data/gapminder_all.csv', 'data/gapminder_gdp_oceania.csv', 'data/gapminder_gdp_africa.csv', 'data/s2.csv', 'data/s3.csv', 'data/s1.csv', 'data/gapminder_life_expectancy_years.csv', 'data/gapminder_gdp_asia.csv'] Sử dụng import glob print('all csv files in data directory:', glob.glob('data/*.csv')) 3 và import glob print('all csv files in data directory:', glob.glob('data/*.csv')) 1 để xử lý hàng loạt tệpBạn nên đặt tên cho các tệp của mình một cách có hệ thống. Như bạn đã biết, Python rất chính xác về những thứ như viết hoa, vì vậy nếu tên tệp của bạn không nhất quán (e. g. , all csv files in data directory: ['data/gapminder_gdp_americas.csv', 'data/gapminder_gdp_europe.csv', 'data/gapminder_all.csv', 'data/gapminder_gdp_oceania.csv', 'data/gapminder_gdp_africa.csv', 'data/s2.csv', 'data/s3.csv', 'data/s1.csv', 'data/gapminder_life_expectancy_years.csv', 'data/gapminder_gdp_asia.csv']9, for filename in glob.glob('data/gapminder_gdp*.csv'): data = pd.read_csv(filename) print(filename, data['gdpPercap_1952'].min())0, for filename in glob.glob('data/gapminder_gdp*.csv'): data = pd.read_csv(filename) print(filename, data['gdpPercap_1952'].min())1), thì việc viết mã với import glob print('all csv files in data directory:', glob.glob('data/*.csv'))3 hoạt động chính xác sẽ khó hơn Đối với dữ liệu Gapminder, may mắn thay, tên tệp khá có hệ thống và nhất quán (cũng như tên của các cột bên trong mỗi tệp), vì vậy chúng tôi có thể sử dụng thông tin sau để đọc từng tệp và in GDP tối thiểu từ năm 1952 for filename in glob.glob('data/gapminder_gdp*.csv'): data = pd.read_csv(filename) print(filename, data['gdpPercap_1952'].min()) data/gapminder_gdp_americas.csv 1397.717137 data/gapminder_gdp_europe.csv 973.5331948 data/gapminder_gdp_oceania.csv 10039.59564 data/gapminder_gdp_africa.csv 298.8462121 data/gapminder_gdp_asia.csv 331.0 Nối các tệp vào một khung dữ liệu duy nhấtThông thường, chúng tôi không chỉ muốn mở một tệp và trích xuất một chút dữ liệu (chẳng hạn như giá trị tối thiểu trong các ví dụ trên). Thay vào đó, chúng tôi có thể muốn mở một tập hợp các tệp dữ liệu có liên quan và kết hợp chúng thành một Khung dữ liệu lớn. Ví dụ, trong tâm lý học và khoa học thần kinh, hầu hết các thí nghiệm đều có nhiều người tham gia. Đối với mỗi người tham gia, khi chúng tôi chạy thử nghiệm, chúng tôi nhận được một tệp dữ liệu. Để phân tích dữ liệu giữa những người tham gia, chúng tôi muốn đọc tất cả các tệp dữ liệu của người tham gia và kết hợp chúng thành một Khung dữ liệu gấu trúc có một vài phương pháp cho phép chúng tôi kết hợp DataFrames, bao gồm
Chúng tôi sẽ tập trung ở đây vào cái đầu tiên. for filename in glob.glob('data/gapminder_gdp*.csv'): data = pd.read_csv(filename) print(filename, data['gdpPercap_1952'].min())7 là viết tắt của “concatenate” về cơ bản có nghĩa là kết hợp các tệp bằng cách “xếp chồng” chúng. Nghĩa là, bắt đầu với một Khung dữ liệu và thêm khung dữ liệu mới vào cuối khung, tạo các hàng bổ sung. Trong những gì chúng tôi sẽ làm ở đây, chúng tôi giả sử rằng tất cả các tệp dữ liệu mà chúng tôi đang đọc đều có các cột giống nhau. Ví dụ: trong bộ dữ liệu GDP của Gapminder, mỗi tệp có một cột cho for filename in glob.glob('data/gapminder_gdp*.csv'): data = pd.read_csv(filename) print(filename, data['gdpPercap_1952'].min())8 cộng với một loạt các cột cho GDP trong các năm khác nhau — và các năm giống nhau nằm trong các cột của tất cả các bộ dữ liệu Đọc dữ liệu từ nhiều người tham gia thử nghiệmGiả sử chúng ta có dữ liệu từ một thử nghiệm trong đó chúng ta thực hiện ba người tham gia là con người (đôi khi được gọi là "người") vào những ngày khác nhau. Đối với mỗi người tham gia, chúng tôi có một tệp dữ liệu. Các cột trong tất cả các tệp đều giống nhau vì các tệp được tạo bởi một chương trình máy tính chạy thử nghiệm Chúng tôi cung cấp cho người tham gia mã ID ẩn danh để bảo vệ quyền riêng tư của họ và cho phép quy ước đặt tên đơn giản, có hệ thống cho các tệp. dữ liệu của người tham gia đầu tiên được lưu trong một tệp có tên là for filename in glob.glob('data/gapminder_gdp*.csv'): data = pd.read_csv(filename) print(filename, data['gdpPercap_1952'].min())9, của người thứ hai là data/gapminder_gdp_americas.csv 1397.717137 data/gapminder_gdp_europe.csv 973.5331948 data/gapminder_gdp_oceania.csv 10039.59564 data/gapminder_gdp_africa.csv 298.8462121 data/gapminder_gdp_asia.csv 331.00, v.v. Chúng tôi có thể toàn cầu hóa thư mục dữ liệu chứa các tệp để tìm tất cả các tệp CSV có tên bắt đầu bằng data/gapminder_gdp_americas.csv 1397.717137 data/gapminder_gdp_europe.csv 973.5331948 data/gapminder_gdp_oceania.csv 10039.59564 data/gapminder_gdp_africa.csv 298.8462121 data/gapminder_gdp_asia.csv 331.01 theo sau là một ký tự đơn, theo sau là data/gapminder_gdp_americas.csv 1397.717137 data/gapminder_gdp_europe.csv 973.5331948 data/gapminder_gdp_oceania.csv 10039.59564 data/gapminder_gdp_africa.csv 298.8462121 data/gapminder_gdp_asia.csv 331.02. Chúng tôi sẽ lưu kết quả vào một danh sách mà chúng tôi có thể lặp lại sau này filenames = glob.glob('data/s?.csv') Tiếp theo, chúng tôi tạo một danh sách trống mà chúng tôi sẽ lưu trữ DataFrames từ mỗi người tham gia trong. Cuối cùng, nó sẽ trở thành một danh sách các DataFrames (hãy nhớ rằng, các danh sách có thể chứa bất kỳ loại dữ liệu Python nào khác) và khi chúng tôi đã đọc tất cả dữ liệu, chúng tôi sẽ kết hợp chúng thành một DataFrame. Đây là một thủ thuật quan trọng để sử dụng trong gấu trúc. Lý do liên quan đến cách gấu trúc kết hợp DataFrames và lưu trữ chúng trong bộ nhớ. Nói một cách đơn giản, mỗi lần chúng tôi nối các DataFrames, gấu trúc sẽ thực hiện rất nhiều kiểm tra nội bộ để đảm bảo không có lỗi. Thực hiện kiểm tra này một lần, khi kết hợp nhiều DataFrames, sẽ hiệu quả hơn nhiều (và do đó nhanh hơn) so với thực hiện nhiều lần. Tương tự như vậy, khi một DataFrame được tạo, một lượng không gian bộ nhớ thích hợp sẽ được phân bổ cho nó trên máy tính. Mỗi lần chúng tôi thêm dữ liệu bổ sung, chúng tôi phải tạo một khối bộ nhớ mới, lớn hơn. Cấp phát khối bộ nhớ mới nhiều lần tốn nhiều thời gian hơn là chỉ thực hiện một lần df_list = [] Cuối cùng, sử dụng vòng lặp import glob print('all csv files in data directory:', glob.glob('data/*.csv'))1 để đọc các tệp trong. Điều này sẽ chuyển qua các mục trong danh sách data/gapminder_gdp_americas.csv 1397.717137 data/gapminder_gdp_europe.csv 973.5331948 data/gapminder_gdp_oceania.csv 10039.59564 data/gapminder_gdp_africa.csv 298.8462121 data/gapminder_gdp_asia.csv 331.04; for f in filenames: df_list.append(pd.read_csv(f)) Khi chúng tôi xem nội dung của danh sách, chúng tôi sẽ thấy từng tập dữ liệu, với hai cột của nó (với các tiêu đề cho biết chúng là gì) và dấu phẩy phân tách các mục trong danh sách, như một danh sách điển hình df_list
data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212 gdpPercap_1957 335.997115 gdpPercap_1962 355.203227 gdpPercap_1967 412.977514 gdpPercap_1972 464.099504 gdpPercap_1977 502.319733 gdpPercap_1982 462.211415 gdpPercap_1987 389.876185 gdpPercap_1992 410.896824 gdpPercap_1997 312.188423 gdpPercap_2002 241.165876 gdpPercap_2007 277.551859 dtype: float64 data/gapminder_gdp_asia.csv gdpPercap_1952 331.0 gdpPercap_1957 350.0 gdpPercap_1962 388.0 gdpPercap_1967 349.0 gdpPercap_1972 357.0 gdpPercap_1977 371.0 gdpPercap_1982 424.0 gdpPercap_1987 385.0 gdpPercap_1992 347.0 gdpPercap_1997 415.0 gdpPercap_2002 611.0 gdpPercap_2007 944.0 dtype: float640 Đọc nhiều tệp bằng cách sử dụng hiểu danh sáchMặc dù vòng lặp import glob print('all csv files in data directory:', glob.glob('data/*.csv'))1 ở trên hoạt động tốt nhưng vẫn có một cách khác để thực hiện việc này, đó là sử dụng. Nhớ lại rằng việc hiểu danh sách về cơ bản chỉ là một phiên bản nhỏ gọn của vòng lặp import glob print('all csv files in data directory:', glob.glob('data/*.csv'))1, nhưng chúng có một số lợi thế
data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212 gdpPercap_1957 335.997115 gdpPercap_1962 355.203227 gdpPercap_1967 412.977514 gdpPercap_1972 464.099504 gdpPercap_1977 502.319733 gdpPercap_1982 462.211415 gdpPercap_1987 389.876185 gdpPercap_1992 410.896824 gdpPercap_1997 312.188423 gdpPercap_2002 241.165876 gdpPercap_2007 277.551859 dtype: float64 data/gapminder_gdp_asia.csv gdpPercap_1952 331.0 gdpPercap_1957 350.0 gdpPercap_1962 388.0 gdpPercap_1967 349.0 gdpPercap_1972 357.0 gdpPercap_1977 371.0 gdpPercap_1982 424.0 gdpPercap_1987 385.0 gdpPercap_1992 347.0 gdpPercap_1997 415.0 gdpPercap_2002 611.0 gdpPercap_2007 944.0 dtype: float641 data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212 gdpPercap_1957 335.997115 gdpPercap_1962 355.203227 gdpPercap_1967 412.977514 gdpPercap_1972 464.099504 gdpPercap_1977 502.319733 gdpPercap_1982 462.211415 gdpPercap_1987 389.876185 gdpPercap_1992 410.896824 gdpPercap_1997 312.188423 gdpPercap_2002 241.165876 gdpPercap_2007 277.551859 dtype: float64 data/gapminder_gdp_asia.csv gdpPercap_1952 331.0 gdpPercap_1957 350.0 gdpPercap_1962 388.0 gdpPercap_1967 349.0 gdpPercap_1972 357.0 gdpPercap_1977 371.0 gdpPercap_1982 424.0 gdpPercap_1987 385.0 gdpPercap_1992 347.0 gdpPercap_1997 415.0 gdpPercap_2002 611.0 gdpPercap_2007 944.0 dtype: float640 Kết hợp DataFramesTại thời điểm này, chúng tôi đã đọc từng tệp đầu vào và lưu trữ dưới dạng DataFrame, nhưng chúng tôi có danh sách ba DataFrames riêng biệt. Trong hầu hết các trường hợp, chúng tôi sẽ muốn kết hợp những thứ này theo một cách nào đó. Sau khi xây dựng danh sách các Khung dữ liệu của chúng tôi thông qua việc đọc một tập hợp các tệp, chúng tôi có thể kết hợp chúng thành một Khung dữ liệu duy nhất bằng cách sử dụng phương thức _______ của gấu trúc data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212 gdpPercap_1957 335.997115 gdpPercap_1962 355.203227 gdpPercap_1967 412.977514 gdpPercap_1972 464.099504 gdpPercap_1977 502.319733 gdpPercap_1982 462.211415 gdpPercap_1987 389.876185 gdpPercap_1992 410.896824 gdpPercap_1997 312.188423 gdpPercap_2002 241.165876 gdpPercap_2007 277.551859 dtype: float64 data/gapminder_gdp_asia.csv gdpPercap_1952 331.0 gdpPercap_1957 350.0 gdpPercap_1962 388.0 gdpPercap_1967 349.0 gdpPercap_1972 357.0 gdpPercap_1977 371.0 gdpPercap_1982 424.0 gdpPercap_1987 385.0 gdpPercap_1992 347.0 gdpPercap_1997 415.0 gdpPercap_2002 611.0 gdpPercap_2007 944.0 dtype: float643 người tham giaID dùng thửRT1s220. 3925264s250. 3718102s230. 3968315s260. 6592285s160. 3681423s240. 4179887s180. 3351989s3100. 704491 Đặt cột chỉ mụcNhớ lại rằng nhãn hàng trong gấu trúc được gọi là chỉ mục. Chúng ta có thể chuyển đổi bất kỳ cột nào thành chỉ mục bằng phương thức filenames = glob.glob('data/s?.csv')2. Đối với dữ liệu này, một chỉ mục thích hợp là ID người tham gia, nằm trong cột filenames = glob.glob('data/s?.csv')3. Lưu ý rằng chúng ta cần gán kết quả của phép toán filenames = glob.glob('data/s?.csv')2 cho filenames = glob.glob('data/s?.csv')5 để thay đổi được lưu trữ data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212 gdpPercap_1957 335.997115 gdpPercap_1962 355.203227 gdpPercap_1967 412.977514 gdpPercap_1972 464.099504 gdpPercap_1977 502.319733 gdpPercap_1982 462.211415 gdpPercap_1987 389.876185 gdpPercap_1992 410.896824 gdpPercap_1997 312.188423 gdpPercap_2002 241.165876 gdpPercap_2007 277.551859 dtype: float64 data/gapminder_gdp_asia.csv gdpPercap_1952 331.0 gdpPercap_1957 350.0 gdpPercap_1962 388.0 gdpPercap_1967 349.0 gdpPercap_1972 357.0 gdpPercap_1977 371.0 gdpPercap_1982 424.0 gdpPercap_1987 385.0 gdpPercap_1992 347.0 gdpPercap_1997 415.0 gdpPercap_2002 611.0 gdpPercap_2007 944.0 dtype: float644 data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212 gdpPercap_1957 335.997115 gdpPercap_1962 355.203227 gdpPercap_1967 412.977514 gdpPercap_1972 464.099504 gdpPercap_1977 502.319733 gdpPercap_1982 462.211415 gdpPercap_1987 389.876185 gdpPercap_1992 410.896824 gdpPercap_1997 312.188423 gdpPercap_2002 241.165876 gdpPercap_2007 277.551859 dtype: float64 data/gapminder_gdp_asia.csv gdpPercap_1952 331.0 gdpPercap_1957 350.0 gdpPercap_1962 388.0 gdpPercap_1967 349.0 gdpPercap_1972 357.0 gdpPercap_1977 371.0 gdpPercap_1982 424.0 gdpPercap_1987 385.0 gdpPercap_1992 347.0 gdpPercap_1997 415.0 gdpPercap_2002 611.0 gdpPercap_2007 944.0 dtype: float645 Xác định trận đấuTệp nào trong số các tệp này không khớp với biểu thức filenames = glob.glob('data/s?.csv')6?
Nhấn vào nút để tiết lộ câu trả lời 1 không khớp. Chuỗi df_list = []0 xảy ra ở cả châu Mỹ và châu Á Tập tin toàn cầuĐiền vào chỗ trống để đoạn mã dưới đây thực hiện công việc sau
Lưu ý rằng không phải tất cả các tệp dữ liệu Gapminder đều chứa dữ liệu GDP, nhưng tên tệp sẽ cho biết tệp nào chứa dữ liệu GDP. data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212 gdpPercap_1957 335.997115 gdpPercap_1962 355.203227 gdpPercap_1967 412.977514 gdpPercap_1972 464.099504 gdpPercap_1977 502.319733 gdpPercap_1982 462.211415 gdpPercap_1987 389.876185 gdpPercap_1992 410.896824 gdpPercap_1997 312.188423 gdpPercap_2002 241.165876 gdpPercap_2007 277.551859 dtype: float64 data/gapminder_gdp_asia.csv gdpPercap_1952 331.0 gdpPercap_1957 350.0 gdpPercap_1962 388.0 gdpPercap_1967 349.0 gdpPercap_1972 357.0 gdpPercap_1977 371.0 gdpPercap_1982 424.0 gdpPercap_1987 385.0 gdpPercap_1992 347.0 gdpPercap_1997 415.0 gdpPercap_2002 611.0 gdpPercap_2007 944.0 dtype: float646 data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212 gdpPercap_1957 335.997115 gdpPercap_1962 355.203227 gdpPercap_1967 412.977514 gdpPercap_1972 464.099504 gdpPercap_1977 502.319733 gdpPercap_1982 462.211415 gdpPercap_1987 389.876185 gdpPercap_1992 410.896824 gdpPercap_1997 312.188423 gdpPercap_2002 241.165876 gdpPercap_2007 277.551859 dtype: float64 data/gapminder_gdp_asia.csv gdpPercap_1952 331.0 gdpPercap_1957 350.0 gdpPercap_1962 388.0 gdpPercap_1967 349.0 gdpPercap_1972 357.0 gdpPercap_1977 371.0 gdpPercap_1982 424.0 gdpPercap_1987 385.0 gdpPercap_1992 347.0 gdpPercap_1997 415.0 gdpPercap_2002 611.0 gdpPercap_2007 944.0 dtype: float647 Nhấp vào nút để tiết lộ giải pháp data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212 gdpPercap_1957 335.997115 gdpPercap_1962 355.203227 gdpPercap_1967 412.977514 gdpPercap_1972 464.099504 gdpPercap_1977 502.319733 gdpPercap_1982 462.211415 gdpPercap_1987 389.876185 gdpPercap_1992 410.896824 gdpPercap_1997 312.188423 gdpPercap_2002 241.165876 gdpPercap_2007 277.551859 dtype: float64 data/gapminder_gdp_asia.csv gdpPercap_1952 331.0 gdpPercap_1957 350.0 gdpPercap_1962 388.0 gdpPercap_1967 349.0 gdpPercap_1972 357.0 gdpPercap_1977 371.0 gdpPercap_1982 424.0 gdpPercap_1987 385.0 gdpPercap_1992 347.0 gdpPercap_1997 415.0 gdpPercap_2002 611.0 gdpPercap_2007 944.0 dtype: float648 hiểu danh sáchBây giờ hãy viết lại mã ở trên để sử dụng khả năng hiểu danh sách thay vì vòng lặp import glob print('all csv files in data directory:', glob.glob('data/*.csv'))1 và tổng cộng chỉ có hai dòng mã (không bao gồm các lệnh df_list = []3 và xem 10 dòng đầu tiên của kết quả) Nhấp vào nút để tiết lộ giải pháp Thực hiện trong hai dòng mã data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212 gdpPercap_1957 335.997115 gdpPercap_1962 355.203227 gdpPercap_1967 412.977514 gdpPercap_1972 464.099504 gdpPercap_1977 502.319733 gdpPercap_1982 462.211415 gdpPercap_1987 389.876185 gdpPercap_1992 410.896824 gdpPercap_1997 312.188423 gdpPercap_2002 241.165876 gdpPercap_2007 277.551859 dtype: float64 data/gapminder_gdp_asia.csv gdpPercap_1952 331.0 gdpPercap_1957 350.0 gdpPercap_1962 388.0 gdpPercap_1967 349.0 gdpPercap_1972 357.0 gdpPercap_1977 371.0 gdpPercap_1982 424.0 gdpPercap_1987 385.0 gdpPercap_1992 347.0 gdpPercap_1997 415.0 gdpPercap_2002 611.0 gdpPercap_2007 944.0 dtype: float649 Đối với một thách thức thậm chí còn lớn hơn, hãy xem liệu bạn có thể giảm mã xuống một dòng không Nhấp vào nút để tiết lộ giải pháp Thực hiện trong một dòng mã import glob print('all csv files in data directory:', glob.glob('data/*.csv'))0 Tóm tắt các điểm chính
|