【发布时间】: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