Ok tôi đã đọc một số chủ đề ở đây trên Stack Overflow. Tôi nghĩ rằng điều này sẽ khá dễ dàng đối với tôi nhưng tôi thấy rằng tôi vẫn không nắm bắt được Python rất tốt. Tôi đã thử ví dụ nằm ở cách kết hợp 2 tệp CSV với giá trị cột chung, nhưng cả hai tệp đều có số dòng khác nhau và điều đó rất hữu ích nhưng tôi vẫn không có kết quả mà tôi hy vọng sẽ đạt được.
Về cơ bản tôi có 2 tệp CSV với cột đầu tiên chung. Tôi muốn hợp nhất 2. tức là.
filea.csv
title,stage,jan,feb darn,3.001,0.421,0.532 ok,2.829,1.036,0.751 three,1.115,1.146,2.921
fileb.csv
title,mar,apr,may,jun, darn,0.631,1.321,0.951,1.751 ok,1.001,0.247,2.456,0.3216 three,0.285,1.283,0.924,956
output.csv [không phải cái tôi đang nhận được nhưng những gì tôi muốn]
title,stage,jan,feb,mar,apr,may,jun darn,3.001,0.421,0.532,0.631,1.321,0.951,1.751 ok,2.829,1.036,0.751,1.001,0.247,2.456,0.3216 three,1.115,1.146,2.921,0.285,1.283,0.924,956
đầu ra.csv [đầu ra mà tôi thực sự có]
title,feb,may ok,0.751,2.456 three,2.921,0.924 darn,0.532,0.951
Mã tôi đang thử:
'''
testing merging of 2 csv files
'''
import csv
import array
import os
with open['Z:\\Desktop\\test\\filea.csv'] as f:
r = csv.reader[f, delimiter=',']
dict1 = {row[0]: row[3] for row in r}
with open['Z:\\Desktop\\test\\fileb.csv'] as f:
r = csv.reader[f, delimiter=',']
#dict2 = {row[0]: row[3] for row in r}
dict2 = {row[0:3] for row in r}
print str[dict1]
print str[dict2]
keys = set[dict1.keys[] + dict2.keys[]]
with open['Z:\\Desktop\\test\\output.csv', 'wb'] as f:
w = csv.writer[f, delimiter=',']
w.writerows[[[key, dict1.get[key, "''"], dict2.get[key, "''"]] for key in keys]]
Bất kỳ trợ giúp nào cũng được đánh giá rất cao.
Vì khóa học này đang được phát hành dần dần, bất cứ khi nào một bài viết và video mới được phát hành, sau khi ban đầu nhân bản kho lưu trữ. & NBSP; bạn sẽ cần chạy lệnh này trong dòng lệnh / thiết bị đầu cuối của bạn [từ thư mục gốc của khóa học]:You will need to run this command within your command line / terminal [from the root directory of the course]:
git pull origin master
Điều này sẽ kéo bất kỳ thay đổi gần đây nào đã được thực hiện trên phiên bản GitHub.com của khóa học và sẽ cho phép bạn dễ dàng nhận được nội dung mới khi được thêm vào.
Kết quả học tập
- Để tìm hiểu phương thức pd.concat [] là gì và cách thức hoạt động của nó
- Tìm hiểu cách kết hợp nhiều tệp CSV bằng Pandas
Trước hết, hãy để nói rằng chúng tôi có các tệp 5, 10 hoặc 100 .csv. Kết hợp tất cả những điều này bằng tay có thể cực kỳ mệt mỏi và chắc chắn xứng đáng được tự động hóa. Do đó, trong bài tập ngày hôm nay, & nbsp; chúng tôi sẽ kết hợp nhiều tệp CSV chỉ trong 8 dòng mã.we’ll combine multiple csv files within only 8 lines of code.
Đối với hướng dẫn này, & nbsp; Tôi đã chuẩn bị 5 trang hàng đầu .CSV Báo cáo từ AHREFS & NBSP; có thể tìm thấy trong thư mục sau:
'data/pbpython.com-top-pages-by-traffic-subdomains-US-17-May-2020_20-24-30-2c4e06e2ea39cce8b2f514e24c929e51.csv'
'data/machinelearningmastery.com-top-pages-by-traffic-subdomains-US-17-May-2020_20-25-38-b4088b6c6c987653748b10c0543a5713.csv'
Một trong những vấn đề với việc tự động phát hiện các tệp CSV là & nbsp; tên được tạo động. & Nbsp; do đó chúng tôi sẽ sử dụng tên mở rộng tệp .csv và gói python được gọi là glob để tự động phát hiện tất cả các tệp kết thúc bằng tên .csv trong một thư mục làm việc cụ thể.the names are dynamically generated. Therefore we will be using the .csv file extension name and a python package called glob to automatically detect all of the files ending with a .csv name within a specific working directory.
Nhập gói và đặt thư mục làm việc
Bạn sẽ cần phải thay đổi thư mục/thư mục của bạn thành thư mục cụ thể của bạn.specific directory.
import os
import glob
import pandas as pd
# os.chdir["/directory"]
Bằng cách viết PWD trong dòng lệnh, chúng ta có thể xác định đường dẫn tệp chính xác mà các tệp .csv trên trang AHREFS này được đặt tại:
pwd
/Users/jamesphoenix/Desktop/Imran_And_James_Projects/Python_For_SEO/2_bulk_csv_operations/data
Bây giờ, chúng ta hãy chuyển sang thư mục làm việc mong muốn của chúng tôi, nơi các tệp CSV:
os.chdir["/Users/jamesphoenix/Desktop/Imran_And_James_Projects/Python_For_SEO/2_bulk_csv_operations/data"]
Bây giờ, hãy để chạy! LS và! PWD chỉ để cho thấy rằng chúng tôi đã thay đổi thư mục:
title,mar,apr,may,jun, darn,0.631,1.321,0.951,1.751 ok,1.001,0.247,2.456,0.3216 three,0.285,1.283,0.924,9560
Pro-tip: Sử dụng! Trước lệnh Linux cho phép bạn chạy các lệnh Unix/Linux trong tệp Notebook Jupyter!
title,mar,apr,may,jun, darn,0.631,1.321,0.951,1.751 ok,1.001,0.247,2.456,0.3216 three,0.285,1.283,0.924,9561
title,mar,apr,may,jun, darn,0.631,1.321,0.951,1.751 ok,1.001,0.247,2.456,0.3216 three,0.285,1.283,0.924,9562
Bước 2: Sử dụng toàn cầu để phù hợp với mẫu .csv,
Bây giờ chúng tôi sẽ khớp với mẫu tệp [‘.csv,] trong tất cả các tệp nằm trong & nbsp; thư mục làm việc hiện tại.current working directory.
title,mar,apr,may,jun, darn,0.631,1.321,0.951,1.751 ok,1.001,0.247,2.456,0.3216 three,0.285,1.283,0.924,9563
title,mar,apr,may,jun, darn,0.631,1.321,0.951,1.751 ok,1.001,0.247,2.456,0.3216 three,0.285,1.283,0.924,9564
Bước 3: Hãy để kết hợp tất cả các tệp trong danh sách và xuất dưới dạng CSV
Trong mã bên dưới, chúng tôi sẽ đọc tất cả các CSV và sau đó sẽ sử dụng phương thức pd.concat [] để xếp từng dataFrame lên trên một phương thức khác.
Nhưng trước khi chúng tôi làm điều đó, hãy để đảm bảo rằng & nbsp; chúng tôi có thể nhận được một kết quả trong khung dữ liệu gấu trúc bằng cách thêm mã hóa phù hợp:we can get one result within a pandas dataframe by adding the appropriate encoding:
- UTF-16 [đây là loại mã hóa cụ thể].
- \ t [dữ liệu phân định tab].
title,mar,apr,may,jun, darn,0.631,1.321,0.951,1.751 ok,1.001,0.247,2.456,0.3216 three,0.285,1.283,0.924,9565
title,mar,apr,may,jun, darn,0.631,1.321,0.951,1.751 ok,1.001,0.247,2.456,0.3216 three,0.285,1.283,0.924,9566
title,mar,apr,may,jun, darn,0.631,1.321,0.951,1.751 ok,1.001,0.247,2.456,0.3216 three,0.285,1.283,0.924,9567
title,mar,apr,may,jun, darn,0.631,1.321,0.951,1.751 ok,1.001,0.247,2.456,0.3216 three,0.285,1.283,0.924,9568
Bây giờ, hãy để chia nhỏ những gì dòng mã trên, trước hết chúng tôi lặp qua tất cả các tên tệp và gán cho chúng từng cái một cho biến F. Mỗi tệp CSV sau đó được đọc và chuyển đổi thành một DataFrame Pandas với:
title,mar,apr,may,jun, darn,0.631,1.321,0.951,1.751 ok,1.001,0.247,2.456,0.3216 three,0.285,1.283,0.924,9569
Sau đó, chúng tôi kết hợp tất cả các khung dữ liệu với nhau và xếp chúng lên nhau bằng cách sử dụng:
title,stage,jan,feb,mar,apr,may,jun darn,3.001,0.421,0.532,0.631,1.321,0.951,1.751 ok,2.829,1.036,0.751,1.001,0.247,2.456,0.3216 three,1.115,1.146,2.921,0.285,1.283,0.924,9560
Đó là nó, trong 8 dòng mã mà bạn có thể dễ dàng kết hợp bao nhiêu tệp .csv tùy thích!
- Hãy nhớ rằng tất cả các tệp CSV & nbsp; phải có cùng một cột nếu không bạn sẽ không thể kết hợp chúng một cách hiệu quả!must have the same columns otherwise you will not be able to effectively concatenate them!
Bước 4 Lưu DataFrame mới của bạn vào CSV
Bây giờ, hãy sử dụng & nbsp; os.chdir [‘..,] & nbsp; để đi lên một thư mục làm việc trước khi lưu dữ liệu của chúng tôi:os.chdir[‘..’] to go up one working directory before saving our data:
title,stage,jan,feb,mar,apr,may,jun darn,3.001,0.421,0.532,0.631,1.321,0.951,1.751 ok,2.829,1.036,0.751,1.001,0.247,2.456,0.3216 three,1.115,1.146,2.921,0.285,1.283,0.924,9561
title,stage,jan,feb,mar,apr,may,jun darn,3.001,0.421,0.532,0.631,1.321,0.951,1.751 ok,2.829,1.036,0.751,1.001,0.247,2.456,0.3216 three,1.115,1.146,2.921,0.285,1.283,0.924,9562
title,stage,jan,feb,mar,apr,may,jun darn,3.001,0.421,0.532,0.631,1.321,0.951,1.751 ok,2.829,1.036,0.751,1.001,0.247,2.456,0.3216 three,1.115,1.146,2.921,0.285,1.283,0.924,9563Phản ứng của bạn là gì?
Trang web này chứa các liên kết đến một số trang web của bên thứ ba được mô tả là liên kết liên kết. Các liên kết liên kết này cho phép chúng tôi có được một khoản hoa hồng nhỏ khi bạn nhấp và mua sản phẩm trên các trang web đó [nó không tốn kém gì thêm!]. AttackData.com là người tham gia Chương trình Associates Associates của Amazon Services, một chương trình quảng cáo liên kết được thiết kế để cung cấp phương tiện cho chủ sở hữu trang web để kiếm phí quảng cáo bằng cách quảng cáo và liên kết với Amazon và bất kỳ trang web nào khác có thể liên kết với chương trình AMAZON Service LLC Associates .