我有一个Python(3.6)脚本,它将csv文件中的数据读入pandas数据帧,pandas为从CSV文件中读取的每个新行执行操作...
这适用于静态CSV文件,例如一个要处理的所有数据都已包含在CSV文件中......
我希望能够从另一个Python进程附加到CSV文件,以便可以将数据连续地输入到pandas数据帧中,或者如果将数据提供给pandas的进程到达文件的末尾,它会等待要将新行附加到CSV文件,然后继续将行读入pandas ...
这可能吗?
我是大熊猫的新手,目前我很难理解熊猫如何与实时/动态数据一起使用,因为我看到的所有例子似乎都使用静态CSV文件作为数据源。
理想情况下,我希望能够直接从消息队列中将行提供到pandas中,但我认为这不可行 - 所以我想如果我有第二个Python脚本接收来自的消息然后队列将其作为新行附加到CVS文件,原始脚本可以将其读入pandas ...
我是否误解了大熊猫是如何运作的,或者你能否指出我是否可以/如何让这种事情发挥作用?
答案 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
...虽然我不完全确定这将如何与非静态文件交互,如果这是最好的解决方案......控制读取块远离文件末尾可以是一个解决方案。