【问题标题】:Error with sum() in MySQL running on Google Colab在 Google Colab 上运行的 MySQL 中 sum() 出错
【发布时间】:2021-09-17 13:25:45
【问题描述】:

我有一个 CSV 文件,其中包含 9994 条记录和 21 个字段,其中 4 个是数字字段,存储在 Google 云端硬盘中。
我在 Google Colab VM 中安装 MySQL。安装出现了看似轻微的错误,但 MySQL 启动并且 SQL 命令正常工作

Error: Unable to shut down server with process id 1276
dpkg: error processing package mysql-server-5.7 (--configure):
 installed mysql-server-5.7 package post-installation script subprocess returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
Processing triggers for systemd (237-3ubuntu10.47) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1.2) ...
/sbin/ldconfig.real: /usr/local/lib/python3.7/dist-packages/ideep4py/lib/libmkldnn.so.0 is not a symbolic link

Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

我将 CSV 文件下载到 Colab VM 中,然后创建了一个表。

CREATE TABLE IF NOT EXISTS ss_order (\
RowID int(4),\
OrderID char(14),OrderDate date,\
ShipDate date,ShipMode varchar(16),\
CustomerID char(8),CustomerName varchar(30),Segment varchar(20),\
Country varchar(30),City varchar(30),State varchar(30),PostalCode char(5),Region varchar(15) ,\
ProductID varchar(20), Category varchar(40), SubCategory varchar(40), ProductName varchar(200), \
Sales decimal(8,2), Quantity int(4), Discount decimal(4,2), Profit decimal(8,2) \
); \

然后我加载了表格

LOAD DATA LOCAL INFILE 'SS_Orders.csv' INTO TABLE ss_order \
FIELDS TERMINATED BY ','  IGNORE 1 LINES;  \

没有错误
我执行了一个非常简单的 SQL 命令

select count(*),sum(Sales),Sum(Quantity), Sum(Profit) from ss_order;

得到以下答案

+----------+------------+---------------+-------------+
| count(*) | sum(Sales) | Sum(Quantity) | Sum(Profit) |
+----------+------------+---------------+-------------+
|     9994 | 2026591.44 |        382386 |   276351.97 |
+----------+------------+---------------+-------------+

我随后将 CSV 文件读入 Pandas Dataframe 并生成如下相同的总和

dfSS['Quantity'].sum()
37873
dfSS['Sales'].sum()
2297200.8603
dfSS['Profit'].sum()
286397.0217

显然,这是 MySQL 生成的总和与 Python Pandas 生成的总和之间的巨大差异。我已经用 Google Sheets 和 MS Excel 检查了 Python Pandas 的答案是正确的,或者至少与 Excel 和 Sheets sum 函数一致。
包含 MySQL 和 Pandas 代码的 Colab Notebook 可在this URL 获得。 Colab Notebook 中提供了数据 CSV 文件的 URL。
我的错误在哪里?还是错误?

【问题讨论】:

  • 一个可能的原因可能是数据的某些部分中存在 COMMAS。某些文本字段在数据中有逗号。这些字段用双引号括起来。因此 Python read_csv 命令能够将这些数据保持在一起,但 MySQL load 命令无法将逗号保持在前一个字段中。
  • 真正的挑战是使用 LOAD 命令的方式可以将“一些文本,一些更多文本”等数据作为一个字段而不是两个字段来处理。

标签: python mysql pandas dataframe google-colaboratory


【解决方案1】:

LOAD命令必须改成如下

LOAD DATA LOCAL INFILE 'SS_Orders.csv' INTO TABLE ss_order \
FIELDS TERMINATED BY ',' enclosed by '\"' IGNORE 1 LINES;  \

以反映字段数据由“
包围的事实 这样就彻底解决了问题。

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 1970-01-01
    • 2023-03-03
    • 2021-10-08
    • 2020-09-26
    • 2021-05-31
    • 2022-07-28
    • 2023-03-24
    • 2021-07-05
    相关资源
    最近更新 更多