我最近问了这个问题并收到了非常有用的建议。我一直在听取建议,但再次遇到了无法解决的问题。如果有任何建议,我将非常感激。
在我之前的情况下,我将数据从组织良好的外部文件读取到数据框中。数据已经在列中,我所要做的就是获取数据:
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
一种更简洁的方法(这样我不会存储很多文件)是直接从网站获取数据并以有组织的方式将其读入数据帧。但是,我花了几个小时试图查找有关如何执行此操作的信息,但没有成功。如果有人以前遇到过这种事情,我很想知道什么有效。谢谢你。
假设可以从输入中提取以
"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