簡體   English   中英

導入多個CSV文件,從每個文件中選擇1列,然后用Jupyter Noteboos中的文件名重命名該列

[英]Import multiple CSV files, select 1 Column from each file & rename the column with the file name in Jupyter Noteboos

我試着從這個kaggle鏈接導入CSV 100個文件- https://www.kaggle.com/natehenderson/nate-s-cryptocurrency-analysis/data

每個文件都包含不同加密貨幣的歷史信息。

每個文件如下所示:

數據看起來如何

對於當前的分析,我只需要每個文件的市值列以及帶有時間戳的索引。

因此,對於每個文件,唯一需要的列就是市值。 然后,我需要追加每列並用文件名替換該列的名稱。

最終結果應如下所示:

最后結果

如果每列包含市值和粗略值,則每個值應與索引相對應,並且該列的名稱應與csv文件的名稱相同。

有什么想法我該怎么做?

以下內容將幫助您入門。 假設您有一個包含所有CSV文件的文件夾,並且每個CSV文件都具有相同的格式,即:

Date,Open,High,Low,Close,Volume,Market Cap
"Sep 22, 2017",1.23,1.25,1.14,1.24,513898,12916700
"Sep 23, 2017",1.28,1.35,1.18,1.23,1700200,13448400

在嘗試水平寫入數據時,需要先將所有數據收集到內存中,然后才能進行寫入。 該腳本一次讀取每個文件,並將每一行分配給字典的字典。 第一個包含date ,第二個包含具有該日期條目的所有貨幣。 date將轉換為datetime對象,以確保在寫入輸出CSV文件時可以對它們進行正確排序。 讀取每個文件時,其名稱存儲在一個集中,以便可以使用貨幣名稱的確定列表。

為了輸出,貨幣名稱被排序,並且DictWriter用於保存所有值。 這具有為任何丟失的數據存儲空值的好處:

from collections import defaultdict
from operator import itemgetter
from datetime import datetime
import csv
import glob
import os

req_cols = itemgetter(0, 6)
all_data = defaultdict(dict)
currencies = set()
date_format1 = '%b %d, %Y'  # e.g. "Sep 22, 2017"
date_format2 = '%B %d, %Y'  # e.g. "June 22, 2017"

for csv_filename in glob.glob('*.csv'):
    with open(csv_filename, newline='') as f_input:
        currency_name = os.path.splitext(os.path.basename(csv_filename))[0]
        csv_input = csv.reader(f_input)
        header = next(csv_input)
        currencies.add(currency_name)

        for row in csv_input:
            date, market_cap = req_cols(row)

            try:
                date = datetime.strptime(date, date_format1)
            except ValueError:      # Try "June 22, 2017"
                date = datetime.strptime(date, date_format2)

            all_data[date][currency_name] = market_cap

currencies = sorted(currencies)

with open('output.csv', 'w', newline='') as f_output:
    header = ['Date'] + currencies
    csv_output = csv.DictWriter(f_output, fieldnames=header)
    csv_output.writeheader()

    for date, entries in sorted(all_data.items()):
        entries['Date'] = date.strftime(date_format1)
        csv_output.writerow(entries)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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