批量获取大熊猫数据框而无需重复吗?

问题描述

我已经与其他几个人一起研究了以下StackOverflow answer,可能会因为感到犯了错误而无法确切地找出位置,对此我可能会感到厌倦。我基本上想将pandas数据帧分成多个块,然后通过JSON逐段发送到API端点。我不希望同一行被发送多次。我的问题在以下过程的第4步中。

可复制的示例

第1步:创建数据框

^/home/

第1步输出

# Dataframe Creation

import numpy as np
import pandas as pd

filenames = ["file_"+str(x) for x in np.arange(1,11)]
languages = ['en','en','fr','es','en']

test_df = pd.DataFrame({'file': filenames,'lang': languages})

第2步-两个功能

file    lang
0   file_1  en
1   file_2  en
2   file_3  fr
3   file_4  en
4   file_5  en
5   file_6  en
6   file_7  es
7   file_8  en
8   file_9  fr
9   file_10 en

步骤3-测试get_chunk_df函数的输出-可以

def get_chunk_df(large_df,splits):
    """splits df into chunks"""
    for chunk_df in np.array_split(large_df,splits):
        yield chunk_df


def get_json_chunks(df,splits):
    """converts each chunk to a dict which is basically going to be a JSON load"""
    documents = {"documents": []}
    df_chunks = get_chunk_df(df,splits)
    for chunk_df in df_chunks:
        for idx,row in chunk_df.iterrows():
            documents["documents"].append({
                "id": str(idx + 1),"text": row["lang"]
            })
        yield documents

第3步输出

chunk_gen = get_chunk_df(test_df,3)
counter = 0
for chk in chunk_gen:
    counter = counter + 1
    print(f"***********PRINTING {counter} CHUNK...")
    print(chk)

第4步-我的问题在这里

***********PRINTING 1 CHUNK...
     file lang
0  file_1   en
1  file_2   en
2  file_3   fr
3  file_4   en
***********PRINTING 2 CHUNK...
     file lang
4  file_5   en
5  file_6   en
6  file_7   es
***********PRINTING 3 CHUNK...
      file lang
7   file_8   en
8   file_9   fr
9  file_10   en

第4步输出

json_chunks = get_json_chunks(test_df,3)

for json_chk in json_chunks:
    print(f"First row: {json_chk['documents'][0]}")
    print(f"Last row: {json_chk['documents'][-1]}")

但是我希望预期的输出为:

First row: {'id': '1','text': 'en'}
Last row: {'id': '4','text': 'en'}
First row: {'id': '1','text': 'en'}
Last row: {'id': '7','text': 'es'}
First row: {'id': '1','text': 'en'}
Last row: {'id': '10','text': 'en'}

谢谢!

解决方法

您可以在documents = {"documents": []}循环之前创建for,然后append创建相同的documents,但是必须在{{1}内创建新的documents }-循环

for

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...