在 Python 中合并大型 CSV 时,Dask 数据框没有属性“_meta_nonempty”
Dask dataframe has no attribute '_meta_nonempty' while merging large CSVs in Python
我尝试 Pandas 使用:
import pandas as pd
df1 = pd.read_csv("csv1.csv")
df2 = pd.read_csv("csv2.csv")
my_keys = ["my_id", "my_subid"]
joined_df = pd.merge(df1, df1, on=my_keys)
joined_df.to_csv('out_df.csv', index=False)
经过一些磨合后出现内存错误。
接下来我尝试了 Dask:
import dask.dataframe as dd
ddf1 = dd.read_csv("csv1.csv")
ddf2 = dd.read_csv("csv2.csv")
my_keys = ["my_id", "my_subid"]
joined_ddf = dd.merge(ddf1, ddf2, on=[my_keys])
joined_ddf.to_csv('out_ddf.csv', index=False)
我得到了相当神秘的:
'DataFrame' object has no attribute '_meta_nonempty'
可能会提到 the doc(我猜是因为昂贵的类型推断或 Pandas 中发生的事情)。但是在使用 pandas 中的类型手动设置元数据之后,尝试了 from_pandas()
却一无所获,我认为 Dask 不是正确的选择。
下一步是什么?如果没有元数据技巧,我最好的选择是使用 sqlalchemy
和 df.to_sql
将连接卸载到外部数据库中?由于连接中的多个索引,我远离普通 csv
模块。
跟进:转储到 Postgres 非常轻松,尽管数据帧对我来说仍然看起来更干净。
import pandas as pd
from sqlalchemy import create_engine
df1 = pd.read_csv("csv1.csv")
df2 = pd.read_csv("csv2.csv")
engine = create_engine('postgresql://user:passwd@localhost:5432/mydb')
df1.to_sql('tableOne', engine)
df2.to_sql('tableTwo', engine)
query = """
SELECT *
FROM tableOne AS one
INNER JOIN tableTwo AS two
ON one.subject_id=two.subject_id
AND one.subject_sub_id=two.subject_sub_id
ORDER BY
one.subject_id,
one.subject_id
"""
df_result = pd.read_sql_query(query, engine)
df_result.to_sql('resultTable', engine)
df_result.to_csv("join_result.csv")
以后还得再试试Dask。
我尝试 Pandas 使用:
import pandas as pd
df1 = pd.read_csv("csv1.csv")
df2 = pd.read_csv("csv2.csv")
my_keys = ["my_id", "my_subid"]
joined_df = pd.merge(df1, df1, on=my_keys)
joined_df.to_csv('out_df.csv', index=False)
经过一些磨合后出现内存错误。
接下来我尝试了 Dask:
import dask.dataframe as dd
ddf1 = dd.read_csv("csv1.csv")
ddf2 = dd.read_csv("csv2.csv")
my_keys = ["my_id", "my_subid"]
joined_ddf = dd.merge(ddf1, ddf2, on=[my_keys])
joined_ddf.to_csv('out_ddf.csv', index=False)
我得到了相当神秘的:
'DataFrame' object has no attribute '_meta_nonempty'
可能会提到 the doc(我猜是因为昂贵的类型推断或 Pandas 中发生的事情)。但是在使用 pandas 中的类型手动设置元数据之后,尝试了 from_pandas()
却一无所获,我认为 Dask 不是正确的选择。
下一步是什么?如果没有元数据技巧,我最好的选择是使用 sqlalchemy
和 df.to_sql
将连接卸载到外部数据库中?由于连接中的多个索引,我远离普通 csv
模块。
跟进:转储到 Postgres 非常轻松,尽管数据帧对我来说仍然看起来更干净。
import pandas as pd
from sqlalchemy import create_engine
df1 = pd.read_csv("csv1.csv")
df2 = pd.read_csv("csv2.csv")
engine = create_engine('postgresql://user:passwd@localhost:5432/mydb')
df1.to_sql('tableOne', engine)
df2.to_sql('tableTwo', engine)
query = """
SELECT *
FROM tableOne AS one
INNER JOIN tableTwo AS two
ON one.subject_id=two.subject_id
AND one.subject_sub_id=two.subject_sub_id
ORDER BY
one.subject_id,
one.subject_id
"""
df_result = pd.read_sql_query(query, engine)
df_result.to_sql('resultTable', engine)
df_result.to_csv("join_result.csv")
以后还得再试试Dask。