Python Pandas:如何通过搜索关键字后面的值将数据从网站获取到数据框中?

问题描述 投票:0回答:1

我最近问了这个问题并收到了非常有用的建议。我一直在听取建议,但再次遇到了无法解决的问题。如果有任何建议,我将非常感激。

在我之前的情况下,我将数据从组织良好的外部文件读取到数据框中。数据已经在列中,我所要做的就是获取数据:

import pandas as pd

df = pd.read_table("organizedValues.txt", delimiter="\t")

在当前问题中,我需要的数据不在组织良好的文件中。它们发布在网站上。 我想将数据放入 Pandas 数据框中。。这是详细信息。

有许多不同的分子。每个分子都有一个单独的网页,并且始终具有相同的结构。这是一个分子网页如何显示的示例。

CH4   Methane                  
    13.00000        Things in unit                             
     4.00000        L, units in unit defintion                     
   262.22300        mMass (lb/mol)                              
   300.00000        K_0 (C)                                           
   100.45200        V_0 (m^3/mol)                                    
   719.08310        Eta_0 (-)                                       
     0.00000        Some parameter                           
     0.00000        Another parameter                           
     0.00000        Strain (-)                            
   200.00000        K_1 (C)

我遵循了here的建议从 URL 读取数据并将其保存在文件中。现在我有一个名为“ch4.txt”的文件。问题是它很乱。我不能像在上一篇文章中那样使用“read_table”。这是一个非常小的片段作为示例:

{"名称":"test2","路径":"test2","contentType":"文件"},{"名称":"test5","路径":"测试"5,"contentType":"文件"}],"totalCount":500}},"fileTreeProcessingTime":25,"foldersToFetch":[],"reducedMotionEnabled":null,"repo":{"id":yyy,"defaultBranch":"main" ,"name":"code"name,"ownerLogin":"用户名","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-04-31T01:30:52.000 Z",v=4","public":true,"private":false,"isOrgOwned":false},"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"main ","listCacheKey":"XXX","canEdit":false,"refType":"branch","currentOid":"XXX"},"path":"or","currentUser":null,"blob" :{"rawLines":[" CH4 甲烷“,”13.00000 应变 (-) "," 0.00000 K_0 (C)
"," 300.00000 单位中的事物 "," 13.00000
Eta_0(-)“,”756

我需要在文件中搜索“

Strain (-)
”等关键字,然后提取关键字后面的值(在本例中为
0.00000
)。对于这个特定的示例,我希望最终得到一个 Pandas 数据框,例如:

    Name   Strain (-)   K_0 (C)    Things in unit  Eta_0 (-)
1   CH4    0.00000      300.00000  13.00000        756  

一种更简洁的方法(这样我不会存储很多文件)是直接从网站获取数据并以有组织的方式将其读入数据帧。但是,我花了几个小时试图查找有关如何执行此操作的信息,但没有成功。如果有人以前遇到过这种事情,我很想知道什么有效。谢谢你。

python python-3.x pandas dataframe file-io
1个回答
0
投票

假设可以从输入中提取以

"blob"
开头的子字符串(样本是不完整的片段),以下是如何按预期将其转换为数据帧

import json
import pandas as pd
from io import StringIO

# fragment may need to be surrounded with {}
rawstr = '''
{
  "blob": {
    "rawLines": ["CH4   Methane                  ",
    "            13.00000        Strain (-)                             ",
    "             0.00000   K_0 (C)     ",
    "         300.00000     Things in unit   ",
    "             13.00000  Eta_0 (-)   ", "756    ."
    ]
  }
}
'''

# parsing the fragment as json
data = json.load(StringIO(rawstr))

cdata = []
for v in data["blob"]["rawLines"]:
    vals = [x for x in v.strip().split(' ') if x != '']
    cdata.append([vals[0], " ".join(vals[1:])])

datadict = {}
datadict['Name'] = [cdata[0][0]]

for s in range(1,5):
    datadict[cdata[s][1]] = cdata[s+1][0]

df = pd.DataFrame(data=datadict, dtype=object)

print(df)

结果

  Name Strain (-)    K_0 (C) Things in unit Eta_0 (-)
0  CH4    0.00000  300.00000       13.00000       756
© www.soinside.com 2019 - 2024. All rights reserved.