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