1

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

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

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

这可能吗?

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

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

我是否误解了熊猫的工作方式,或者您能否就我是否/如何让这种事情发挥作用提供任何指示?

4

2 回答 2

3

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

然后,您可以获取该内存中的微小数据帧并将其附加到您想要的任何其他数据帧,这也在内存中。您也可以使用 .to_csv('whatever', mode='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')
于 2018-01-25T20:51:30.280 回答
2

您可以尝试使用 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

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

于 2018-01-25T18:52:33.073 回答