Dask:外连接从多个 csv 文件中读取
Dask: outer join read from multiple csv files
import dask.dataframe as dd
import numpy as np
from dask import delayed
df1 = pd.DataFrame({'a': np.arange(10), 'b': np.random.rand()})
df1 = df1.astype({'a':np.float64})
df2 = pd.DataFrame({'a': np.random.rand(5), 'c': 1})
df1.to_csv('df1.csv')
df2.to_csv('df2.csv')
dd.read_csv('*.csv').compute()
给出内连接结果:
Unnamed: 0 a b
0 0 0.000000 0.218319
1 1 1.000000 0.218319
2 2 2.000000 0.218319
...
并且:
df1_delayed = delayed(lambda: df1)()
df2_delayed = delayed(lambda: df2)()
dd.from_delayed([df1_delayed, df2_delayed]).compute()
给出外连接结果:
a b c
0 0.000000 0.218319 NaN
1 1.000000 0.218319 NaN
2 2.000000 0.218319 NaN
...
如何让read_csv工作在同一个模式下?
编辑:
即使将 dtype 模式传递给 pandas 也不起作用:
dd.read_csv('*.csv', dtype={'a':np.float64, 'b': np.float64, 'c': np.float64}).compute()
通常 dask.dataframe 假设构成 dask.dataframe 的所有 Pandas 数据帧具有相同的列和数据类型。如果不是这种情况,则行为定义不明确。
如果您的 CSV 具有不同的列和数据类型,那么我建议使用 dask.delayed,就像您在第二个示例中所做的那样,并在调用 dask.dataframe.from_delayed
.[=11= 之前明确添加新的空列]
import dask.dataframe as dd
import numpy as np
from dask import delayed
df1 = pd.DataFrame({'a': np.arange(10), 'b': np.random.rand()})
df1 = df1.astype({'a':np.float64})
df2 = pd.DataFrame({'a': np.random.rand(5), 'c': 1})
df1.to_csv('df1.csv')
df2.to_csv('df2.csv')
dd.read_csv('*.csv').compute()
给出内连接结果:
Unnamed: 0 a b
0 0 0.000000 0.218319
1 1 1.000000 0.218319
2 2 2.000000 0.218319
...
并且:
df1_delayed = delayed(lambda: df1)()
df2_delayed = delayed(lambda: df2)()
dd.from_delayed([df1_delayed, df2_delayed]).compute()
给出外连接结果:
a b c
0 0.000000 0.218319 NaN
1 1.000000 0.218319 NaN
2 2.000000 0.218319 NaN
...
如何让read_csv工作在同一个模式下?
编辑:
即使将 dtype 模式传递给 pandas 也不起作用:
dd.read_csv('*.csv', dtype={'a':np.float64, 'b': np.float64, 'c': np.float64}).compute()
通常 dask.dataframe 假设构成 dask.dataframe 的所有 Pandas 数据帧具有相同的列和数据类型。如果不是这种情况,则行为定义不明确。
如果您的 CSV 具有不同的列和数据类型,那么我建议使用 dask.delayed,就像您在第二个示例中所做的那样,并在调用 dask.dataframe.from_delayed
.[=11= 之前明确添加新的空列]