将 CSV 数据导入 Google 表格

2024-04-02

当尝试使用IMPORTDATA该文件的函数:

https://www.kaggle.com/stefanoleone992/fifa-20-complete-player-dataset#players_20.csv https://www.kaggle.com/stefanoleone992/fifa-20-complete-player-dataset#players_20.csv

出现意外错误,表明无法将数据导入电子表格。有没有其他方法可以将这些数据导入到我的电子表格中?

这些数据对我正在做的工作非常重要。能够输入和复制所有内容,然后根据我的需要进行过滤,这将节省我近 3 个月的工作时间。

能够至少导入所有玩家的简单信息非常重要,但不一定必须导入每个玩家的所有信息列。可导入的列数已经很完美了。

如果有什么办法的话我将不胜感激。


  • 您想要下载以下内容的 CSV 文件players_20.csv from https://www.kaggle.com/stefanoleone992/fifa-20-complete-player-dataset并将 CSV 数据放入电子表格中。
  • 您希望使用 Google Apps 脚本来实现此目的。

如果我的理解是正确的,这个答案怎么样?请将此视为多个答案之一。

问题和解决方法:

不幸的是,CSV数据不能直接从URL下载https://www.kaggle.com/stefanoleone992/fifa-20-complete-player-dataset#players_20.csv。为了下载 CSV 文件,需要登录 kaggle。与其他模式一样,您也可以使用API​​下载它。在这个答案中,为了下载 CSV 文件,我使用了 Kaggle 的公共 API。

Usage:

1. 检索令牌文件:

在使用脚本之前,请先注册一个帐号https://www.kaggle.com,并检索令牌文件。关于如何找回token文件,可以看官方文件 https://www.kaggle.com/docs/api#authentication.

为了使用 Kaggle 的公共 API,您必须首先使用 API 令牌进行身份验证。在网站标题中,单击您的用户个人资料图片,然后从下拉菜单中单击“我的帐户”。这将带您进入您的帐户设置:https://www.kaggle.com/account https://www.kaggle.com/account。向下滚动到页面中标记为 API 的部分:

要创建新令牌,请单击“创建新 API 令牌”按钮。这会将新的身份验证令牌下载到您的计算机上。

在此脚本中,使用下载的令牌文件中的令牌对象。

2.运行脚本:

请将以下脚本复制并粘贴到电子表格的容器绑定脚本中。并请设置变量csvFilename, path and tokenObject。对于你的情况,我已经设置了csvFilename and path。因此,请仅设置您的令牌对象。

function myFunction() {
  var csvFilename = "players_20.csv"; // Please set the CSV filename.
  var path = "stefanoleone992/fifa-20-complete-player-dataset"; // Please set the path.
  var tokenObject = {"username":"###","key":"###"}; // <--- Please set the token object.
  
  var baseUrl = "https://www.kaggle.com/api/v1/datasets/download/";
  var url = baseUrl + path;
  var params = {headers: {Authorization: "Basic " + Utilities.base64Encode(tokenObject.username + ':' + tokenObject.key)}};
  var blob = UrlFetchApp.fetch(url, params).getBlob();
  var csvBlob = Utilities.unzip(blob).filter(function(b) {return b.getName() == csvFilename});
  if (csvBlob.length == 1) {
    var csvData = Utilities.parseCsv(csvBlob[0].getDataAsString());
    var sheet = SpreadsheetApp.getActiveSheet();
    sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
  } else {
    throw new Error("CSV file of " + csvFilename + " was not found.");
  }
}
Flow:

该脚本的流程如下。

  1. 当脚本运行时,kaggle 命令为kaggle datasets download -d stefanoleone992/fifa-20-complete-player-dataset使用 Google Apps 脚本运行。这样,ZIP 文件就被下载了。
  2. 检索 CSV 文件csvFilename从下载的 ZIP 文件中。
  3. 从 CSV 文件中解析 CSV 数据。
  4. Put the CSV data to the active sheet.
    • 在此脚本中,所有数据均使用 blob 进行处理。所以该文件没有创建。

Note:

  • It seems that the CSV data is large. So please wait until the script is finished.
    • 在我的环境中,我花了大约 150 秒的时间才将 CSV 数据放入电子表格中。
    • 的 CSV 数据players_20.csv有 18279 行和 104 列。
  • 如果错误发生在Utilities.unzip(blob),请测试修改自var blob = UrlFetchApp.fetch(url, params).getBlob() to var blob = UrlFetchApp.fetch(url, params).getBlob().setContentTypeFromExtension().

参考:

  • Kaggle 公共 API 的身份验证 https://www.kaggle.com/docs/api#authentication
  • Kaggle API https://github.com/Kaggle/kaggle-api

如果我误解了你的问题并且这不是你想要的方向,我深表歉意。

Added 1:

如果您想选择要放置的列,请按如下方式修改上面的示例脚本。

From:

var csvData = Utilities.parseCsv(csvBlob[0].getDataAsString());
var sheet = SpreadsheetApp.getActiveSheet();

To:

var csvData = Utilities.parseCsv(csvBlob[0].getDataAsString());
var needColumns = [1, 2, 3];
csvData = csvData.map(function(row) {return needColumns.map(function(col) {return row[col]})});
var sheet = SpreadsheetApp.getActiveSheet();
  • 在上面的修改中,作为测试用例,将1、2和3列放入电子表格中。

Added 2:

From 将 CSV 数据放入电子表格的基准测试结果 https://gist.github.com/tanaikech/030203c695b308606041587e6da269e7例如,使用 Sheets API 来放置 CSV 数据怎么样?为此,请将上面的示例脚本修改如下。在运行脚本之前,请在高级 Google 服务中启用 Sheets API。 https://developers.google.com/apps-script/guides/services/advanced#enabling_advanced_services

From:

var csvData = Utilities.parseCsv(csvBlob[0].getDataAsString());
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

To:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var resource = {requests: [{pasteData: {data: csvBlob[0].getDataAsString(), coordinate: {sheetId: sheet.getSheetId()}, delimiter: ","}}]};
Sheets.Spreadsheets.batchUpdate(resource, ss.getId());
  • 在本例中,我花了大约 50 秒的时间才将 CSV 数据放入电子表格中。

参考:

  • 基准:使用 Google Apps 脚本将 CSV 数据导入电子表格 https://gist.github.com/tanaikech/030203c695b308606041587e6da269e7
  • 高级谷歌服务 https://developers.google.com/apps-script/guides/services/advanced
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 CSV 数据导入 Google 表格 的相关文章

随机推荐

  • 获取console.log()显示自定义对象描述

    我有一个自定义的 JS 对象来表示网格 对于这个例子来说 它看起来像这样 function Grid c r var layout var contentPointer 0 this getCell function c r Return
  • 在 TVML 应用程序中更改 XMLHttpRequest 的用户代理

    我正在使用 TVMLKit 开发 Apple TV 应用程序 我的应用程序的 JavaScript 代码尝试使用以下命令向服务器发送 HTTP 请求XMLHttpRequest 服务器需要特定的用户代理 所以我尝试了以下方法 var req
  • Android 视频视图中缓冲区达到 20% 后如何开始(播放)视频

    我有一个视频视图 可以使用来自服务器的 url 来播放视频 我希望在缓冲达到 20 时播放视频 所以我已经将 setOnBufferingUpdateListener 的侦听器添加到媒体播放器中 如下所示 Uri video Uri par
  • 如何为 php 安装 hiphop?

    大多数开发人员都了解 Facebook 的 Hiphop for php 我想在我的脚本中使用它 但不知道从哪里开始 我应该与我的服务器提供商联系吗 或者我需要在脚本中添加一些代码吗 HipHop 很难安装 但幸运的是我刚刚经历过它 您需要
  • 相当于 Python 中 Julia 中的“with”?

    Julia 有与 Python 相当的东西吗 with 也许作为一个宏 这非常有用 例如 自动关闭打开的文件 Use a do堵塞 关于 do 块的文档是here https en wikibooks org wiki Introducin
  • 使用 VSTO 将数据加载到 Microsoft Project 时如何提高性能

    背景 我们有一个现有的应用程序 可以将数据加载到 Microsoft Project 中 以便可以由 MS Project 进行操作 原始应用程序是由 VB6 编写的旧式 COM 项目加载项 针对 MS Project 2003 2007
  • 启用 SSL 刷新 URL 时出现 React-router 问题

    目前 我在使用 React router 的 BrowserHistory 和 nginx 代理转发请求时遇到问题 我读过以下答案 React router url 在刷新或手动写入时不起作用 https stackoverflow com
  • Ninject:每个被拦截的类实例有一个拦截器实例?

    我目前遇到一个问题 尝试为每个被拦截的类实例连接一个拦截器实例 我正在 InterceptorRegistrationStrategy 中创建 Advice 并设置回调以解析来自内核的拦截器 它有一个注入构造函数 请注意 我只能在回调中实例
  • 即使没有来自客户端的连接,选择器也会无限循环

    我是 Java NIO 的新手 在阅读了一些教程后 我尝试自己编写一个简单的 NIO 服务器和客户端 我的服务器只做了一件简单的事情 就是从客户端监听并打印到控制台 客户端只需连接到服务器并向其发送 3 条消息 Hello 问题是我的服务器
  • .NET / C# 拼写检查器

    有人知道 C NET 的多语言拼写检查器吗 我的意思是 我有它和我找到了一些替代方案 但是有人有一个很好的成功故事吗 我需要在我的应用程序中添加拼写检查器 我想要一个集成的库System Windows Forms TexBox 例如 另外
  • 使用 std::codecvt_xxx 将 C++ std::wstring 转换为 utf8

    C 11有转换宽字符字符串的工具std wstring从 到 utf8 表示 std codecvt std codecvt utf8 std codecvt utf8 utf16 etc Windows 应用程序可使用哪一个来转换常规宽字
  • C++ 向量大小类型

    我刚刚开始学习 C 有一个关于向量的问题 我正在读的书指出 如果我想提取 double 类型向量的大小 例如 我应该这样做 vector
  • 为什么不能在 switch 语句中声明变量?

    我想了解更多关于 为什么不能在 switch 语句中声明变量 https stackoverflow com questions 92396 why cant variables be declared in a switch statem
  • 显示为“n”、“p”或“f”的小数字

    我正在使用绘图来绘制一些数据 小数字 我看到奇怪的格式 例如78 98p 576 65n 678 76f 这些F是什么 没有任何地方解释这些是什么 我怎样才能把它们变成带有 E 的科学记数法 看到这个https plot ly python
  • Visual Studio 代码:缺少 X509Certificate2UI

    尝试使用时出现以下错误X509Certificate2UI在 VS 代码中 命名空间 System Security Cryptography X509Certificates 中不存在类型或命名空间名称 X509Certificate2U
  • 递归的优点和缺点是什么?

    关于在排序算法中使用递归而不是非递归方法 或者就此而言 任何算法的优点和缺点是什么 大多数情况下 递归速度较慢 并且占用更多堆栈 递归的主要优点是 对于像树遍历这样的问题 它使算法变得更容易或更 优雅 看看一些比较 link http pa
  • Oracle 是否存储 Number 数据类型的尾随零?

    当我在表中存储数值并在 SQL Developer 中查询该表时 它没有显示数字数据类型的尾随零 create table decimal test decimal field number 10 insert into decimal t
  • 使用强化学习训练神经网络

    我了解前馈神经网络的基础知识 以及如何使用反向传播算法训练它们 但我正在寻找一种可以用于通过强化学习在线训练 ANN 的算法 例如 车杆向上摆动 http www google com search q cart 20pole 20swin
  • 带有子项的 ViewComponents

    我可以在这样的页面中使用 ViewComponents 吗
  • 将 CSV 数据导入 Google 表格

    当尝试使用IMPORTDATA该文件的函数 https www kaggle com stefanoleone992 fifa 20 complete player dataset players 20 csv https www kagg