gpt4 book ai didi

python - Pandas df 的流数据

转载 作者:太空狗 更新时间:2023-10-29 21:08:26 27 4
gpt4 key购买 nike

我正在尝试模拟使用 pandas 来访问不断变化的文件。

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

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))

第二个文件通过输出数据帧的形状来检查数据的变化:

import pandas as pd

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

问题是当我获得正确形状的 DF 时,有时它会输出 (0x2)

即:

...
(10x2)
(10x2)
...
(10x2)
(0x2)
(11x2)
(11x2)
...

这确实发生在一些但不是在每个形状变化之间(文件添加到数据框)。

知道当第一个脚本打开文件添加数据时会发生这种情况,而第二个脚本无法访问它,因此 (0x2),这会发生任何数据丢失吗?

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

编辑

这样做的目的是仅加载新数据(我有一个代码可以做到这一点)并“即时”进行分析。一些分析将包括输出/秒、绘图(类似于流图)和少数其他数值计算。

最大的问题是我只能访问 csv 文件,我需要能够分析数据,而不会丢失或延迟。

最佳答案

其中一个脚本正在读取文件,而另一个脚本正在尝试写入文件。两个脚本不能同时访问该文件。正如 Padraic Cunningham 在评论中所说,您可以实现锁定文件来解决此问题。

有一个名为 lockfile 的 python 包可以做到这一点带文档 here .

这是您实现了 lockfile 包的第一个脚本:

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))

这是实现了 lockfile 包的第二个脚本:

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 毫秒的等待时间,以便我可以减慢控制台的输出速度。

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

关于python - Pandas df 的流数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32594137/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com