2017-07-17 97 views
0

正如标题所说 - 是否可以编写一个asyncio事件循环,它将按特定列中的唯一值对DataFrame进行切片并将其保存在我的驱动器中?也许更重要的是 - 速度更快吗?我可以使用Python asyncio切片并将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:\Users\5157213\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 
+0

请[编辑](https://stackoverflow.com/posts/45154096/edit)该问题包括完整的追溯。就目前而言,我们无法确定哪个“await”指的是。 – dirn

+0

已编辑 - 它看起来像指向df.to_csv行旁边的await,但没有等待的任何回报 – Greg

回答

1

据我所知,应该没有ASYNCIO支持,这样的熊猫。我认为单线程基于事件的架构并不是系统中的最佳工具,您可以使用其他几十个选项来处理加载/大量数据。对于大数据集,请看dask

你得到的错误是因为你试图await功能Dataframe.to_csv不返回Future(或任何其他awaitable对象),但None

相关问题