我仍在学习如何使用数据库:
我有一个Dask dataframes,它成功地从本地sql DB复制,如下所示:
ddf_authorized = dd.read_sql_table("cz_transaction_authorized", "mysql+pymysql://user_account:mysqlworld@127.0.0.1:3306/user","id")
ddf_mobileuser = dd.read_sql_table("cz_mobile_user", "mysql+pymysql://user_account:mysqlworld@127.0.0.1:3306/user","id")
ddf_users = dd.read_sql_table("users", "mysql+pymysql://user_account:mysqlworld@127.0.0.1:3306/user","id")
ddf_reader = dd.read_sql_table("reader", "mysql+pymysql://user_account:mysqlworld@127.0.0.1:3306/user","id")
ddf_mid = dd.read_sql_table("cz_mid","mysql+pymysql://user_account:mysqlworld@127.0.0.1:3306/user","id")
我知道我的本地数据库中有很多NA值,特别是事务授权数据库,它有140万行,所以当我调用ddf_authorized.head()
只是想检查我的数据帧时,它给了我这个错误
ValueError: Cannot convert non-finite values (NA or inf) to integer
我确实尝试使用fillna()
填充NA值,但错误仍然存在,如下所示:
for x in list(ddf_authorized.columns.values):
if ddf_authorized[x].dtype != 'O':
ddf_authorized[x] = ddf_authorized[x].fillna(0)
else:
ddf_authorized[x] = ddf_authorized[x].fillna("-")
有没有更安全的方法或方法,用这些NA值检查Dask数据帧?因为我对熊猫很熟悉,也没有任何关于NA值的问题,而且不得不在达斯克看到这个问题。。你知道吗
我试着将数据库中的一个表导出到csv文件中,它没有NA值,这里是csv文件http://www.sharecsv.com/s/147ba0bb507bb6dcc14a3a6c91af4eef/reader_table.csv
然后,我试着读它dask.read\u csv文件你知道吗
x = dd.read_csv("C:/Users/User/Desktop/Data Science Journey/My Cashlez Work Assets/Insight 16 Desember/reader_table.csv")
如果我运行x.head()
,它运行成功,没有任何错误,但是如果我用y.head()直接从DB读取它,它就不工作了,如下所示:
y = dd.read_sql_table("reader", "mysql+pymysql://user_account:mysqlworld@127.0.0.1:3306/user","id")
y["id"] = ddf_reader["reader_id"].astype('int64')
y["devicetype_fk"] = ddf_reader["devicetype_fk"].astype('O')
y["serial_number"] = ddf_reader["serial_number"].astype('O')
所以也许这是一个read_sql_table()
的问题?你知道吗
Dask可能推断出错误的数据类型:它通过查看顶值来假定一个整数列。然后您会遇到这样一个问题:意外的
NA
无法转换为int。你知道吗尝试使用^{} keyword of read_sql_table 显式指定列的数据类型(例如float(对于带有nans和infs的数字类型)或object(对于任意混合类型))。你知道吗
您可以传递一个空的df作为meta,例如
其中显式定义所需的数据类型
{'col1': float}
。默认值为object。这似乎需要指定npartitions
(作为read_sql_table
的关键字参数)来优化dask性能。你知道吗相关问题 更多 >
编程相关推荐