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

时间:2018-01-25 18:42:17

标签: python-3.x pandas csv pandas-datareader

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

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

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

这可能吗?

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

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

我是否误解了大熊猫是如何运作的,或者你能否指出我是否可以/如何让这种事情发挥作用?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

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

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