Hướng dẫn how do i read a large excel file in python? - làm cách nào để đọc một tệp excel lớn trong python?

Hướng dẫn how do i read a large excel file in python? - làm cách nào để đọc một tệp excel lớn trong python?

Yaakov Bressler

Ngày 11 tháng 6 năm 2020

5 phút đọc

Mô -đun bộ nhớ, Ảnh của Christiaan Colen

Đôi khi bạn cần phải làm việc với các tệp

import pandas as pd

# Read the file
data = pd.read_csv("Accidents7904.csv", low_memory=False)

# Output the number of rows
print("Total rows: {0}".format(len(data)))

# See which headers are available
print(list(data))
8 hoặc
import pandas as pd

# Read the file
data = pd.read_csv("Accidents7904.csv", low_memory=False)

# Output the number of rows
print("Total rows: {0}".format(len(data)))

# See which headers are available
print(list(data))
9. Trong trường hợp chúng có các hàng lớn hơn 1M, Excel sẽ tải các hàng 1M đầu tiên hoặc sự cố. Bài viết này sẽ trình bày cách tải các tệp như vậy trong Python.

Thông tin cơ bản về cấu trúc tệp excel

Trong hướng dẫn này, bạn sẽ học cách làm việc với các tệp excel lớn trong gấu trúc, tập trung vào việc đọc và phân tích tệp XLS và sau đó làm việc với một tập hợp con của dữ liệu gốc.

Hướng dẫn này sử dụng Python (được thử nghiệm với các phiên bản 64 bit của v2.7.9 và v3.4.3), gandas (v0.16.1) và xlsxwriter (v0.7.3). Chúng tôi khuyên bạn nên sử dụng phân phối Anaconda để nhanh chóng bắt đầu, vì nó được cài đặt sẵn với tất cả các thư viện cần thiết.

Đọc tập tin

Tệp đầu tiên mà chúng tôi sẽ làm việc là tổng hợp tất cả các vụ tai nạn xe hơi ở Anh từ năm 1979-2004, để trích xuất tất cả các vụ tai nạn xảy ra ở London vào năm 2000.

Excel

Bắt đầu bằng cách tải xuống tệp zip nguồn từ data.gov.uk và trích xuất nội dung. Sau đó, cố gắng mở tai nạn7904.csv trong excel. Hãy cẩn thận. Nếu bạn không có đủ bộ nhớ, điều này rất có thể làm hỏng máy tính của bạn.

Điều gì xảy ra?

Bạn sẽ thấy một tệp không được tải hoàn toàn lỗi vì Excel chỉ có thể xử lý một triệu hàng cùng một lúc.

Chúng tôi cũng đã thử nghiệm điều này trong LibreOffice và nhận được một lỗi tương tự - dữ liệu không thể tải hoàn toàn vì số lượng hàng tối đa trên mỗi tờ bị vượt quá.

Để giải quyết vấn đề này, chúng ta có thể mở tệp trong gấu trúc. Trước khi chúng tôi bắt đầu, mã nguồn là trên GitHub.

Gấu trúc

Trong một thư mục dự án mới, hãy kích hoạt VirtualEnv, sau đó cài đặt Pandas:

$ pip install pandas==0.16.1

Bây giờ, hãy để xây dựng kịch bản. Tạo một tệp có tên Pandas_Accidents.py và Thêm mã sau:

import pandas as pd

# Read the file
data = pd.read_csv("Accidents7904.csv", low_memory=False)

# Output the number of rows
print("Total rows: {0}".format(len(data)))

# See which headers are available
print(list(data))

Ở đây, chúng tôi đã nhập gấu trúc, đọc trong tệp mà có thể mất một thời gian, tùy thuộc vào số lượng bộ nhớ của bạn đã có và xuất ra tổng số hàng mà tệp có cũng như các tiêu đề có sẵn (ví dụ: tiêu đề cột).

Khi chạy, bạn sẽ thấy:

Total rows: 6224198
['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
 'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
 'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
 'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
 'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
 '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
 'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
 'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
 'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
 'LSOA_of_Accident_Location']

Vì vậy, có hơn sáu triệu hàng! Không có gì ngạc nhiên khi Excel nghẹn ngào. Chuyển sự chú ý của bạn sang danh sách các tiêu đề, đặc biệt là người đầu tiên:

'\xef\xbb\xbfAccident_Index',

Điều này nên đọc

Total rows: 6224198
['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
 'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
 'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
 'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
 'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
 '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
 'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
 'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
 'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
 'LSOA_of_Accident_Location']
0. Điều gì với
Total rows: 6224198
['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
 'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
 'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
 'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
 'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
 '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
 'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
 'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
 'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
 'LSOA_of_Accident_Location']
1 ngay từ đầu? Chà,
Total rows: 6224198
['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
 'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
 'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
 'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
 'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
 '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
 'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
 'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
 'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
 'LSOA_of_Accident_Location']
2 thực sự có nghĩa là giá trị là hình lục giác, đó là dấu lệnh byte, cho thấy văn bản là unicode.

Tại sao nó lại quan trọng với chúng tôi?

Bạn không thể cho rằng các tệp bạn đọc là sạch sẽ. Chúng có thể chứa các biểu tượng bổ sung như thế này có thể loại bỏ kịch bản của bạn.

Tệp này tốt, theo đó nó sạch sẽ - nhưng nhiều tệp có dữ liệu bị thiếu, dữ liệu ở định dạng không nhất quán nội bộ, v.v. Làm sạch bao nhiêu? Đủ để cho phép bạn thực hiện một số phân tích. Thực hiện theo nguyên tắc nụ hôn.

Bạn có thể yêu cầu loại dọn dẹp nào?

  • Khắc phục ngày/giờ. Tệp tương tự có thể có ngày ở các định dạng khác nhau, như các định dạng của Mỹ (MM-DD-YY) hoặc Châu Âu (DD-MM-YY). Chúng cần được đưa vào một định dạng chung.
  • Xóa bất kỳ giá trị trống. Tệp có thể có các cột trống và/hoặc hàng, và điều này sẽ xuất hiện dưới dạng nan (không phải là số) trong gấu trúc. Pandas cung cấp một cách đơn giản để loại bỏ những điều này: hàm
    Total rows: 6224198
    ['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
     'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
     'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
     'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
     'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
     '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
     'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
     'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
     'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
     'LSOA_of_Accident_Location']
    
    3. Chúng tôi đã thấy một ví dụ về điều này trong bài viết blog cuối cùng.
  • Loại bỏ bất kỳ giá trị rác đã đi vào dữ liệu. Đây là những giá trị không có ý nghĩa (như dấu thứ tự byte mà chúng ta đã thấy trước đó). Đôi khi, có thể làm việc xung quanh họ. Ví dụ, có thể có một bộ dữ liệu trong đó độ tuổi được nhập dưới dạng số điểm nổi (do nhầm lẫn). Hàm
    Total rows: 6224198
    ['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
     'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
     'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
     'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
     'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
     '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
     'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
     'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
     'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
     'LSOA_of_Accident_Location']
    
    4 sau đó có thể được sử dụng để đảm bảo mọi lứa tuổi ở định dạng số nguyên.

Phân tích

Đối với những người bạn biết SQL, bạn có thể sử dụng các câu lệnh chọn, trong đó và/hoặc/hoặc các câu lệnh với các từ khóa khác nhau để tinh chỉnh tìm kiếm của bạn. Chúng ta có thể làm điều tương tự trong gấu trúc, và theo cách thân thiện với lập trình viên hơn.

Để bắt đầu, hãy để Lôi tìm thấy tất cả các vụ tai nạn đã xảy ra vào Chủ nhật. Nhìn vào các tiêu đề ở trên, có một trường

Total rows: 6224198
['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
 'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
 'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
 'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
 'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
 '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
 'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
 'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
 'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
 'LSOA_of_Accident_Location']
5 mà chúng tôi sẽ sử dụng.

Trong tập tin zip bạn đã tải xuống, có một tệp có tên là Safe-Safety-Safety-Data-Guide-1979-2004.xls, chứa thêm thông tin về các mã được sử dụng. Nếu bạn mở nó ra, bạn sẽ thấy rằng Chủ nhật có mã

Total rows: 6224198
['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
 'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
 'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
 'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
 'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
 '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
 'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
 'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
 'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
 'LSOA_of_Accident_Location']
6.

print("\nAccidents")
print("-----------")

# Accidents which happened on a Sunday
accidents_sunday = data[data.Day_of_Week == 1]
print("Accidents which happened on a Sunday: {0}".format(
    len(accidents_sunday)))

Đó là cách mà nó đơn giản.

Ở đây, chúng tôi đã nhắm mục tiêu vào trường

Total rows: 6224198
['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
 'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
 'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
 'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
 'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
 '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
 'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
 'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
 'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
 'LSOA_of_Accident_Location']
5 và trả về một khung dữ liệu với điều kiện chúng tôi đã kiểm tra -
Total rows: 6224198
['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
 'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
 'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
 'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
 'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
 '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
 'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
 'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
 'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
 'LSOA_of_Accident_Location']
8.

Khi chạy, bạn sẽ thấy:

Accidents
-----------
Accidents which happened on a Sunday: 693847

Như bạn có thể thấy, đã có 693.847 vụ tai nạn xảy ra vào Chủ nhật.

Hãy cùng làm cho truy vấn của chúng tôi trở nên phức tạp hơn: Tìm hiểu tất cả các vụ tai nạn đã xảy ra vào Chủ nhật và liên quan đến hơn hai mươi chiếc xe:

# Accidents which happened on a Sunday, > 20 cars
accidents_sunday_twenty_cars = data[
    (data.Day_of_Week == 1) & (data.Number_of_Vehicles > 20)]
print("Accidents which happened on a Sunday involving > 20 cars: {0}".format(
    len(accidents_sunday_twenty_cars)))

Chạy tập lệnh. Bây giờ chúng tôi có 10 tai nạn:

Accidents
-----------
Accidents which happened on a Sunday: 693847
Accidents which happened on a Sunday involving > 20 cars: 10

Hãy để thêm một điều kiện khác: thời tiết.

Mở đường đi an toàn đường bộ-hướng dẫn-tài liệu-1979-2004.xls và đi đến bảng thời tiết. Bạn có thể thấy rằng mã

Total rows: 6224198
['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
 'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
 'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
 'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
 'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
 '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
 'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
 'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
 'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
 'LSOA_of_Accident_Location']
9 có nghĩa là, mưa không có gió lớn.

Thêm điều đó vào truy vấn của chúng tôi:

# Accidents which happened on a Sunday, > 20 cars, in the rain
accidents_sunday_twenty_cars_rain = data[
    (data.Day_of_Week == 1) & (data.Number_of_Vehicles > 20) &
    (data.Weather_Conditions == 2)]
print("Accidents which happened on a Sunday involving > 20 cars in the rain: {0}".format(
    len(accidents_sunday_twenty_cars_rain)))

Vì vậy, có bốn vụ tai nạn đã xảy ra vào Chủ nhật, liên quan đến hơn hai mươi chiếc xe, trong khi trời đang mưa:

Accidents
-----------
Accidents which happened on a Sunday: 693847
Accidents which happened on a Sunday involving > 20 cars: 10
Accidents which happened on a Sunday involving > 20 cars in the rain: 4

Chúng tôi có thể tiếp tục làm cho điều này ngày càng phức tạp hơn, khi cần thiết. Hiện tại, chúng tôi sẽ dừng lại vì mối quan tâm chính của chúng tôi là xem xét các vụ tai nạn ở London.

Nếu bạn nhìn vào an toàn đường bộ-safety-guide-1979-2004.xls một lần nữa, có một tờ có tên là Lực lượng Cảnh sát. Mã cho

Total rows: 6224198
['\xef\xbb\xbfAccident_Index', 'Location_Easting_OSGR', 'Location_Northing_OSGR',
 'Longitude', 'Latitude', 'Police_Force', 'Accident_Severity', 'Number_of_Vehicles',
 'Number_of_Casualties', 'Date', 'Day_of_Week', 'Time', 'Local_Authority_(District)',
 'Local_Authority_(Highway)', '1st_Road_Class', '1st_Road_Number', 'Road_Type',
 'Speed_limit', 'Junction_Detail', 'Junction_Control', '2nd_Road_Class',
 '2nd_Road_Number', 'Pedestrian_Crossing-Human_Control',
 'Pedestrian_Crossing-Physical_Facilities', 'Light_Conditions', 'Weather_Conditions',
 'Road_Surface_Conditions', 'Special_Conditions_at_Site', 'Carriageway_Hazards',
 'Urban_or_Rural_Area', 'Did_Police_Officer_Attend_Scene_of_Accident',
 'LSOA_of_Accident_Location']
6 cho biết, Cảnh sát Metropolitan Cảnh sát. Đây là những gì thường được gọi là Scotland Yard, và là lực lượng cảnh sát chịu trách nhiệm cho hầu hết (mặc dù không phải tất cả) của London. Đối với trường hợp của chúng tôi, điều này là đủ tốt và chúng tôi có thể trích xuất thông tin này như vậy:

import pandas as pd

# Read the file
data = pd.read_csv("Accidents7904.csv", low_memory=False)

# Output the number of rows
print("Total rows: {0}".format(len(data)))

# See which headers are available
print(list(data))
0

Chạy tập lệnh. Điều này đã tạo ra một khung dữ liệu mới với các vụ tai nạn được xử lý bởi Cảnh sát Metropolitan từ năm 1979 đến 2004 vào Chủ nhật:

import pandas as pd

# Read the file
data = pd.read_csv("Accidents7904.csv", low_memory=False)

# Output the number of rows
print("Total rows: {0}".format(len(data)))

# See which headers are available
print(list(data))
1

Điều gì sẽ xảy ra nếu bạn muốn tạo một khung dữ liệu mới chỉ chứa tai nạn trong năm 2000?

Điều đầu tiên chúng ta cần làm là chuyển đổi định dạng ngày thành một thứ mà Python có thể hiểu bằng cách sử dụng hàm

'\xef\xbb\xbfAccident_Index',
1. Điều này mất một ngày ở bất kỳ định dạng nào và chuyển đổi nó thành một định dạng mà chúng ta có thể hiểu (yyyy-mm-dd). Sau đó, chúng ta có thể tạo một khung dữ liệu khác chỉ chứa tai nạn cho năm 2000:

import pandas as pd

# Read the file
data = pd.read_csv("Accidents7904.csv", low_memory=False)

# Output the number of rows
print("Total rows: {0}".format(len(data)))

# See which headers are available
print(list(data))
2

Khi chạy, bạn sẽ thấy:

import pandas as pd

# Read the file
data = pd.read_csv("Accidents7904.csv", low_memory=False)

# Output the number of rows
print("Total rows: {0}".format(len(data)))

# See which headers are available
print(list(data))
3

Vì vậy, điều này là một chút khó hiểu lúc đầu. Thông thường, để lọc một mảng, bạn sẽ chỉ sử dụng vòng lặp

'\xef\xbb\xbfAccident_Index',
2 có điều kiện:

import pandas as pd

# Read the file
data = pd.read_csv("Accidents7904.csv", low_memory=False)

# Output the number of rows
print("Total rows: {0}".format(len(data)))

# See which headers are available
print(list(data))
4

Tuy nhiên, bạn thực sự không nên xác định vòng lặp của riêng mình vì nhiều thư viện hiệu suất cao, như Pandas, có chức năng trợ giúp tại chỗ. Trong trường hợp này, các vòng lặp mã trên trên tất cả các phần tử và lọc dữ liệu bên ngoài ngày tập hợp, sau đó trả về các điểm dữ liệu nằm trong ngày.

Nice!

Chuyển đổi

Rất có thể là, trong khi sử dụng gấu trúc, mọi người khác trong tổ chức của bạn đều bị mắc kẹt với Excel. Bạn muốn chia sẻ DataFrame với những người sử dụng Excel?

Đầu tiên, chúng ta cần phải làm một số dọn dẹp. Nhớ dấu lệnh byte mà chúng ta đã thấy trước đó? Điều đó gây ra vấn đề khi viết dữ liệu này vào tệp Excel - Pandas ném UnicodedEcodeError. Tại sao? Bởi vì phần còn lại của văn bản được giải mã là ASCII, nhưng các giá trị thập lục phân có thể được thể hiện trong ASCII.

Chúng tôi có thể viết mọi thứ dưới dạng Unicode, nhưng hãy nhớ nhãn hiệu thứ tự byte này là một điều không cần thiết (đối với chúng tôi) mà chúng tôi không muốn hoặc cần. Vì vậy, chúng tôi sẽ thoát khỏi nó bằng cách đổi tên tiêu đề cột:

import pandas as pd

# Read the file
data = pd.read_csv("Accidents7904.csv", low_memory=False)

# Output the number of rows
print("Total rows: {0}".format(len(data)))

# See which headers are available
print(list(data))
5

Đây là cách để đổi tên một cột trong gấu trúc; Thành thật mà nói một chút phức tạp.

'\xef\xbb\xbfAccident_Index',
3 là cần thiết vì chúng tôi muốn sửa đổi cấu trúc hiện có và không tạo một bản sao, đó là những gì Pandas làm theo mặc định.

Bây giờ chúng ta có thể lưu dữ liệu vào Excel:

import pandas as pd

# Read the file
data = pd.read_csv("Accidents7904.csv", low_memory=False)

# Output the number of rows
print("Total rows: {0}".format(len(data)))

# See which headers are available
print(list(data))
6

Đảm bảo cài đặt xlsxwriter trước khi chạy:

import pandas as pd

# Read the file
data = pd.read_csv("Accidents7904.csv", low_memory=False)

# Output the number of rows
print("Total rows: {0}".format(len(data)))

# See which headers are available
print(list(data))
7

Nếu mọi việc suôn sẻ, điều này nên đã tạo một tệp có tên London_Sundays_2000.xlsx, sau đó lưu dữ liệu của chúng tôi vào Sheet1. Mở tệp này trong Excel hoặc LibreOffice và xác nhận rằng dữ liệu là chính xác.

Sự kết luận

Vì vậy, chúng ta đã hoàn thành những gì? Chà, chúng tôi đã lấy một tệp rất lớn mà Excel không thể mở và sử dụng gấu trúc để-

  1. Mở tập tin.
  2. Thực hiện các truy vấn giống SQL so với dữ liệu.
  3. Tạo một tệp XLSX mới với một tập hợp con của dữ liệu gốc.

Hãy nhớ rằng mặc dù tập tin này là gần 800MB, nhưng trong thời đại của dữ liệu lớn, nhưng nó vẫn còn khá nhỏ. Điều gì sẽ xảy ra nếu bạn muốn mở một tệp 4GB? Ngay cả khi bạn có 8GB trở lên RAM, điều đó vẫn có thể không thể thực hiện được vì phần lớn RAM của bạn được dành riêng cho HĐH và các quy trình hệ thống khác. Trên thực tế, máy tính xách tay của tôi đóng băng một vài lần khi lần đầu tiên đọc trong tệp 800MB. Nếu tôi mở một tệp 4GB, nó sẽ có một cơn đau tim.

Vậy làm thế nào để chúng ta tiến hành?

Bí quyết là không mở toàn bộ tập tin trong một lần. Đó là những gì chúng tôi sẽ xem xét trong bài đăng trên blog tiếp theo. Cho đến lúc đó, phân tích dữ liệu của riêng bạn. Để lại câu hỏi hoặc ý kiến ​​dưới đây. Bạn có thể lấy mã cho hướng dẫn này từ repo.

Làm thế nào để Python đọc các tệp excel lớn?

Giới hạn kích thước hiện tại cho Excel là 1.048.576 hàng bằng 16.384 cột - do tài nguyên bộ nhớ ...
Bước 1: Tạo tệp Excel lớn vô lý.....
Bước 2: Tải tệp Excel lớn một cách lố bịch - với gấu trúc.....
Bước 3: Tải với OpenPyXL.....
Bước 4: Tải với XLRD:.

Bạn có đọc các tệp excel với Python có cách nhanh hơn 1000x không?

Ý tưởng #2: Sử dụng CSV thay vì các tệp Excel nhập các tệp CSV trong Python nhanh hơn 100 lần so với các tệp Excel.Bây giờ chúng ta có thể tải các tệp này trong 0,63 giây.Nhanh hơn gần 10 lần!Use CSVs rather than Excel Files Importing csv files in Python is 100x faster than Excel files. We can now load these files in 0.63 seconds. That's nearly 10 times faster!

Làm cách nào để lấy dữ liệu từ bảng tính excel trong Python?

Các bước để nhập một tệp Excel vào Python bằng Pandas..
Bước 1: Chụp đường dẫn tệp.Đầu tiên, bạn sẽ cần ghi lại đường dẫn đầy đủ nơi lưu trữ tệp Excel trên máy tính của bạn.....
Bước 2: Áp dụng mã Python.....
Bước 3: Chạy mã Python để nhập tệp Excel ..