如何解决批量获取大熊猫数据框而无需重复吗?
我已经与其他几个人一起研究了以下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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。