我可以使用 Python asyncio 将 DataFrame 切片并循环保存吗?
Can I use Python asyncio to slice and save DataFrame in a loop?
如标题所说 - 是否可以编写一个异步事件循环,该循环将按特定列中的唯一值对 DataFrame 进行切片并将其保存在我的驱动器上?也许更重要的是 - 它更快吗?
我试过的是这样的:
async def a_split(dist,df):
temp_df = df[df.district == dist]
await temp_df.to_csv('{}.csv'.format(d))
async def m_lp(df):
for dist in df.district.unique().tolist():
await async_slice(dist,df)
loop = asyncio.get_event_loop()
loop.run_until_complete(m_lp(dfTotal))
loop.close()
但我收到以下错误:
TypeError: object NoneType can't be used in 'await' expression
如果从我的尝试中看不出来,我是 asyncio 的新手,我不确定它是如何工作的。如果这是一个愚蠢的问题,我们深表歉意。
如果 asyncio 不是完成这项工作的好工具 - 还有更好的工具吗?
编辑:
完整追溯如下:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-22-2bc2373d2920> in <module>()
2 loop = asyncio.get_event_loop()
3
----> 4 loop.run_until_complete(m_lp(dfTotal))
5 loop.close()
C:\Users57213\AppData\Local\Continuum\Anaconda3\envs\python36\lib\asyncio\base_events.py in run_until_complete(self, future)
464 raise RuntimeError('Event loop stopped before Future completed.')
465
--> 466 return future.result()
467
468 def stop(self):
<ipython-input-20-9e91c0b1b06f> in m_lp(df)
1 async def m_lp(df):
2 for dist in df.district.unique().tolist():
----> 3 await a_split(dist,df)
<ipython-input-18-200b08417159> in a_split(dist, df)
1 async def a_split(dist,df):
2 temp = df[df.district == dist]
----> 3 await temp.to_csv('C:/Users/5157213/Desktop/Portfolio/{}.csv'.format(dist))
TypeError: object NoneType can't be used in 'await' expression
据我所知,在 Pandas 中没有这样的 asyncio 支持。我认为单线程基于事件的体系结构不是系统中最好的工具,在这些系统中,您有许多其他选项来处理 load/large 数据,即。对于大型数据集,请查看 dask
.
你得到的错误是因为你试图 await
函数 Dataframe.to_csv
而不是 return Future
(或任何其他可等待的对象),但是 None
.
如标题所说 - 是否可以编写一个异步事件循环,该循环将按特定列中的唯一值对 DataFrame 进行切片并将其保存在我的驱动器上?也许更重要的是 - 它更快吗?
我试过的是这样的:
async def a_split(dist,df):
temp_df = df[df.district == dist]
await temp_df.to_csv('{}.csv'.format(d))
async def m_lp(df):
for dist in df.district.unique().tolist():
await async_slice(dist,df)
loop = asyncio.get_event_loop()
loop.run_until_complete(m_lp(dfTotal))
loop.close()
但我收到以下错误:
TypeError: object NoneType can't be used in 'await' expression
如果从我的尝试中看不出来,我是 asyncio 的新手,我不确定它是如何工作的。如果这是一个愚蠢的问题,我们深表歉意。
如果 asyncio 不是完成这项工作的好工具 - 还有更好的工具吗?
编辑:
完整追溯如下:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-22-2bc2373d2920> in <module>()
2 loop = asyncio.get_event_loop()
3
----> 4 loop.run_until_complete(m_lp(dfTotal))
5 loop.close()
C:\Users57213\AppData\Local\Continuum\Anaconda3\envs\python36\lib\asyncio\base_events.py in run_until_complete(self, future)
464 raise RuntimeError('Event loop stopped before Future completed.')
465
--> 466 return future.result()
467
468 def stop(self):
<ipython-input-20-9e91c0b1b06f> in m_lp(df)
1 async def m_lp(df):
2 for dist in df.district.unique().tolist():
----> 3 await a_split(dist,df)
<ipython-input-18-200b08417159> in a_split(dist, df)
1 async def a_split(dist,df):
2 temp = df[df.district == dist]
----> 3 await temp.to_csv('C:/Users/5157213/Desktop/Portfolio/{}.csv'.format(dist))
TypeError: object NoneType can't be used in 'await' expression
据我所知,在 Pandas 中没有这样的 asyncio 支持。我认为单线程基于事件的体系结构不是系统中最好的工具,在这些系统中,您有许多其他选项来处理 load/large 数据,即。对于大型数据集,请查看 dask
.
你得到的错误是因为你试图 await
函数 Dataframe.to_csv
而不是 return Future
(或任何其他可等待的对象),但是 None
.