pandas 如何以最佳方式保存行中的数据?

hc2pp10m  于 2023-01-19  发布在  其他
关注(0)|答案(1)|浏览(143)

我是这个社区的新手,我希望你能帮助我解决我的问题。在我目前的项目中,我想刮一页。这些是有多个信息的加油站。现在所有来自加油站的信息都存储为一个变量。但是,我希望每个加油站都有一行,这样我就能得到一个大的 Dataframe 。每个单独的加油站提供有id,并且它们存储在变量id中。

ids=results["objectID"].tolist()

id_details=[]

for i,id in enumerate(ids):
    input_dict = {
         'diff_time_zone':-1,
         'objectID':id,
         'poiposition':'50.5397219 8.7328552',
         'stateAll':'2',
         'category':1,
         'language':'de',
         'prognosis_offset':-1,
         'windowSize':305
        }
    
    encoded_input_string = json.dumps(input_dict, indent=2).encode('utf-8')
    encoded_input_string = base64.b64encode(encoded_input_string).decode("utf-8") 
    
    r = s.post("https://example.me/getObject_detail.php", headers=headers, data="post="+encoded_input_string)
    soup = BeautifulSoup(r.text, "lxml")
    lists= soup.find('div', class_='inside')
    rs= lists.find_all("p")

    final = []
    for lists in rs:
        txt = lists if type(lists) == NavigableString else lists.text
        id_details.append(txt)
df= pd.DataFrame(id_details,columns = ['place'])
7bsow1i6

7bsow1i61#

那么,我个人会使用数据库,而不是一个 Dataframe 在这种情况下,可能不会保存为文件.正如我所看到的,有基于字典的数据,可以很容易地实现在ElasticSearch例如.
如果有任何原因(这迫使不使用任何类型的数据库)这样做(使用Dataframe)访问文件并将其附加到它的末尾将工作得很好,您应该最大化您的块,因为访问文件并写入它就像一个瓶颈,这里说块是因为RAM不是无限的。
---请求第二种方法的更新。
你的代码中有些部分是缺失的,但是你会明白的。

file_name = 'My_File.csv'
cols = ['place'] # e.x creating an empty csv with only one column - place using pandas
data = dict(zip(cols,[[] for i in range(len(cols))]))
df = pd.DataFrame(data) #creating df
df.to_csv(file_name, mode='w', index=False, header=True) #saving

id_details={'place':[]}
for i, id in enumerate(ids):
    #Some algo...
    for lists in rs:
        id_details['place'].append(txt)
    if i %100==0:
        df_main = pd.DataFrame(id_details)
        df_main.to_csv(file_name, mode='a', index=False, header=False)
        id_details['place'] = []

df_main = pd.DataFrame(id_details)
df_main.to_csv(file_name, mode='a', index=False, header=False)

相关问题