[英]Joining two CSV files with common column in Python without Pandas
[英]Combining two csv files with one common element and sort without pandas
我有兩個 csv 文件看起來像
目標.csv
CLUB, GOALS FOR, GOALS AGAINST
liverpool, 45, 17
chelsea, 37, 23
arsenal, 39, 26
和卡片。csv
CLUB, YELLOW, RED
liverpool, 14, 1
chelsea, 12, 2
arsenal, 16, 4
我正在嘗試合並這兩個文件,然后按名為GOALS RATIO的新列進行排序,其中比率是GOALS FOR / GOALS AGAINST
看起來像
CLUB, GOALS FOR, GOALS AGAINST, YELLOW, RED, RATIO
liverpool, 45, 17, 14, 1, X
chelsea, 37, 23, 12, 2, X
arsenal, 39, 26, 16, 4, X
我目前的代碼是
import csv
from collections import OrderedDict, defaultdict
def facebook_dino():
goals = "goal.csv"
cards = "cards.csv"
new_dict = defaultdict()
with open(goals) as csv1:
goals_data = csv.DictReader(csv1)
with open(cards) as csv2:
cards_data = csv.DictReader(csv2)
但是找不到基於NAME關鍵字參數組合兩個 CSV 的方法。 這可能有或沒有 pandas 嗎?
這是使用 pandas 庫:
import pandas as pd
df1 = pd.read_csv('goal.csv')
df2 = pd.read_csv('cards.csv')
for col in df2.columns:
df1[col] = df2[col]
df1['RATIO'] = df1[' GOALS FOR']/df1[' GOALS AGAINST']
print(df1)
Output :
CLUB GOALS FOR GOALS AGAINST YELLOW RED RATIO
0 liverpool 45 17 14 1 2.647059
1 chelsea 37 23 12 2 1.608696
2 arsenal 39 26 16 4 1.500000
您有匹配名稱順序的行。
這是 output:
CLUB,GOALS FOR,GOALS AGAINST,YELLOW,RED,RATIO
liverpool,45,17,14,1,2.65
chelsea,37,23,12,2,1.61
arsenal,39,26,16,4,1.5
這是代碼
import csv
import os
goals_csv = os.path.join(os.getcwd(), 'goals.csv')
cards_csv = os.path.join(os.getcwd(), 'cards.csv')
output = os.path.join(os.getcwd(), 'combined.csv')
with open(goals_csv) as goals, open(cards_csv) as cards, open(output, 'w') as output:
goal_rows = csv.DictReader(goals)
card_rows = csv.DictReader(cards)
headers = "CLUB,GOALS FOR,GOALS AGAINST,YELLOW,RED,RATIO".split(",")
output_csv = csv.DictWriter(output, headers)
output_csv.writeheader()
while True:
goal_row = next(goal_rows, None)
if goal_row is None:
break
card_row = next(card_rows, None)
goal_row.update(card_row)
goals_against = float(goal_row['GOALS AGAINST'])
goals_for = float(goal_row['GOALS FOR'])
goal_row['RATIO'] = 0 if goals_against == 0 else round(goals_for / goals_against, 2)
output_csv.writerow(goal_row)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.