首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫df流数据

熊猫df流数据
EN

Stack Overflow用户
提问于 2015-09-15 19:31:00
回答 2查看 7.9K关注 0票数 11

我试图模拟使用熊猫来访问一个不断变化的文件。

我有一个文件读取一个csv文件,在其中添加一行,然后随机休眠一段时间来模拟批量输入。

代码语言:javascript
复制
import pandas as pd
from time import sleep
import random

df2 = pd.DataFrame(data = [['test','trial']], index=None)

while True:
    df = pd.read_csv('data.csv', header=None)
    df.append(df2)
    df.to_csv('data.csv', index=False)
    sleep(random.uniform(0.025,0.3))

第二个文件是通过输出dataframe的形状来检查数据的更改:

代码语言:javascript
复制
import pandas as pd

while True:
    df = pd.read_csv('data.csv', header=None, names=['Name','DATE'])
    print(df.shape)

这方面的问题是,当我得到正确的DF形状时,在某些时候它会输出(0x2)

即:

代码语言:javascript
复制
...
(10x2)
(10x2)
...
(10x2)
(0x2)
(11x2)
(11x2)
...

这种情况确实发生在形状的每个更改(添加到dataframe的文件)之间,但不是在此之间。

如果第一个脚本打开文件以添加数据,而第二个脚本无法访问它,因此(0x2),这会发生数据丢失吗?

我不能直接访问流,只能访问输出文件。或者有没有其他可能的解决方案?

编辑

这样做的目的是只加载新数据(我有这样做的代码)并进行“动态”分析。其中一些分析将包括输出/秒、图形化(类似于流图)以及很少的其他数值计算。

最大的问题是,我只有访问csv文件,我需要能够分析数据,因为它来了没有损失或延迟。

EN

回答 2

Stack Overflow用户

发布于 2015-10-30 05:16:37

其中一个脚本正在读取文件,而另一个脚本则试图写入该文件。两个脚本不能同时访问该文件。就像在注释中说的那样,您可以实现一个锁文件来解决这个问题。

有一个python包将执行名为锁文件和Documents这里的操作。

下面是实现了锁文件包的第一个脚本:

代码语言:javascript
复制
import pandas as pd
from time import sleep
import random
from lockfile import FileLock

df2 = pd.DataFrame(data = [['test','trial']], index=None)
lock = FileLock('data.lock')

while True:
    with lock:
        df = pd.read_csv('data.csv', header=None)
        df.append(df2)
        df.to_csv('data.csv', index=False)
    sleep(random.uniform(0.025,0.3))

下面是第二个脚本,它实现了锁文件包:

代码语言:javascript
复制
import pandas as pd
from time import sleep
from lockfile import FileLock

lock = FileLock('data.lock')

while True:
    with lock:
        df = pd.read_csv('data.csv', header=None, names=['Name','DATE'])
    print(df.shape)
    sleep(0.100)

我增加了100 to的等待,这样就可以减缓控制台的输出速度。

这些脚本将在访问"data.lock“文件之前创建一个名为"data.csv”的文件,并在访问"data.csv“文件后删除"data.lock”文件。在这两个脚本中,如果存在"data.lock“,脚本将等待"data.lock”文件不再存在。

票数 3
EN

Stack Overflow用户

发布于 2015-10-31 02:55:10

您的模拟脚本读写data.csv文件。如果一个脚本只以写方式打开文件,而另一个脚本以只读方式打开文件,则可以并发地进行读写。

考虑到这一点,我将您编写该文件的模拟脚本更改为:

代码语言:javascript
复制
from time import sleep
import random

while(True):
    with open("data.csv", 'a') as fp:
        fp.write(','.join(['0','1']))
        fp.write('\n')
    sleep(0.010)

在python中,打开带有“a”的文件意味着只将其追加为写文件。使用'a+‘将附加读和写访问。您必须确保编写该文件的代码将只以只写方式打开该文件,并且您正在读取该文件的脚本绝不能试图写入该文件。否则,您将需要实现另一个解决方案。

现在,您应该能够使用您的第二个脚本来阅读,而不需要您提到的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32594137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档