簡體   English   中英

將兩個 csv 文件與一個公共元素組合並在沒有 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM