【发布时间】:2021-07-04 00:18:36
【问题描述】:
我有一个配置文件(csv):
Column name;Function;Args
Region;function1;arg1
Country;function2;arg1, arg2
email;function3;arg1
...
我想将我的配置文件中的特定功能应用到我的 csv 文件中的特定列(fileIn 大文件 > 1GB) 使用 dask、pandas 或标准 csv:
Region;Country;name
Europe;Slovakia;Mark
Asia;china;Steeve
...
有没有一种干净的方式来迭代配置文件?
df = pd.read_csv(fileIn, sep=';', low_memory=True, chunksize=1000000, error_bad_lines=False)
for chunk in df
chunk['Region'] = chunk['Region'].apply(lambda x: MyClass.function1(args1))
chunk['Country'] = chunk['Country'].apply(lambda x: MyClass.function2(arg1, arg2))
chunk['email'] = chunk['email'].apply(lambda x: MyClass.function3(arg1))
chunk['Region'].to_csv(fileOut, index=False, header=True, sep=';')
...
这是我在配置文件中调用的函数之一的示例:
def function1(value, replaceWith):
text = re.sub(r'[^ ]', replaceWith, value)
return text
【问题讨论】:
-
您可以将
dask用于不适合内存的数据帧。 -
使用read_csv方法pandas.pydata.org/docs/reference/api/pandas.read_csv.html的converters参数读取csv时可以将特定函数映射到列
-
@IvanCalderon 它适用于 pandas,但我有一个大文件,而且我读过很多文章表明 dask 比 pandas 更快。
-
@siraj 似乎 dask 为您完成了繁重的工作,因此您几乎可以像处理 pandas 数据框一样处理 dask 数据框。如果您已经安装了 dask,请检查 dd.read_csv 以发现它是否具有转换器参数 examples.dask.org/dataframes/…
-
@IvanCalderon,是的,这就是我想要做的事情:
df = ddf.read_csv(fileIn, names='Region', low_memory=False) df = df.apply(function1(df, '*'), axis=1).compute()。我收到此错误:expected string or bytes-like object因为我的function1采用@ 参数:第一个是行值(字符串),第二个是'*'。有什么建议吗?
标签: python pandas dataframe csv dask