Python pandas:是否可以在csv文件中读取新行,因为csv文件被另一个进程附加到

Python pandas: Is it possible to read a new line in a csv file, as the csv file is appended to by another process

我有一个Python(3.6)脚本,它将csv文件中的数据读入pandas数据帧,pandas为从CSV文件中读取的每个新行执行操作...

这适用于静态CSV文件,例如一个所有要处理的数据都已包含在CSV文件中的...

我希望能够从另一个Python进程附加到CSV文件,以便可以将数据连续地输入到pandas数据帧中,或者如果将数据提供给pandas的进程到达文件的末尾,它将等待一个新的要附加到CSV文件的行,然后继续将行读入pandas ...

这可能吗?

我是熊猫的新手,目前,我很难理解熊猫如何与实时/动态数据一起使用,因为我看到的所有例子似乎都使用静态CSV文件作为数据源。

理想情况下,我希望能够直接从消息队列中将行提供给pandas,但我认为这不可能 - 所以我想如果我有第二个Python脚本从队列接收消息然后追加它作为CVS文件的新行,原始脚本可以将其读入熊猫...

我是否误解了熊猫是如何工作的,或者你能不能指出我是否能够如何使用这种东西?


您可以从队列中弹出逗号分隔值并将它们包装在数据框中。

然后,您可以将内存中的微小数据帧添加到您想要的任何其他数据帧中,也可以将其附加到内存中。 您也可以使用.to_csv('whatever',mode ='a')将其写入文件。

最好不要首先写入csv并留下一个字符串数组,但由于这更直接地回答了你的问题:

1
2
3
4
5
6
big_df = pandas.read_csv('file.csv')

def handle_csv(csv):
    mini_df = pd.DataFrame([sub.split(",") for sub in csv])
    big_df.append(mini_df)
    mini_df.to_csv("somefile", mode='a')


您可以尝试使用pandas read_csv()函数以小块读取大型csv文件,基本代码如下:

1
2
3
4
import pandas as pd
chunksize = 100
for chunk in pd.read_csv('myfile.csv', chunksize=chunksize):
    print(chunk)

请点击此处了解更多信息:http://pandas.pydata.org/pandas-docs/stable/io.html#io-chunking

...虽然我不完全确定这将如何与非静态文件交互,如果这是最好的解决方案...控制读取块远离文件末尾可能是一个解决方案。