读取存储在文本文件中的字典并转换为熊猫数据框[重复]
Posted
技术标签:
【中文标题】读取存储在文本文件中的字典并转换为熊猫数据框[重复]【英文标题】:Reading dictionary stored on text file and convert to pandas dataframe [duplicate] 【发布时间】:2019-03-17 19:58:50 【问题描述】:我有一个文本文件,其中包含一系列字典形式的数据。 我想在熊猫中读取并存储为数据框。 我怎么读。 我读了 pd.csv 但它没有给我数据框。 任何人都可以帮助我吗? 可以下载文本文件Here
谢谢,
泽普,
【问题讨论】:
你有没有尝试过?查看文件,这似乎是一个标准的 json 文件。但是里面的所有数据都是嵌套的,这不适用于 pandas 数据框,因此您需要更改反序列化 json 的形状。 【参考方案1】:问题是你有一个嵌套的 json。尝试改用 json_normalize:
import requests #<-- requests library helps us handle http-requests
import pandas as pd
id_ = '1DbfQxBJKHvWO2YlKZCmeIN4al3xG8Wq5'
url = 'https://drive.google.com/uc?authuser=0&id=&export=download'.format(id_)
r = requests.get(url)
df = pd.io.json.json_normalize(r.json())
print(df.columns)
或从硬盘驱动器,而 json_normalize 想要读取字典对象而不是路径:
import pandas as pd
import json
with open('myfile.json') as f:
jsonstr = json.load(f)
df = pd.io.json.json_normalize(jsonstr)
返回:
Index(['average.accelerations', 'average.aerialDuels', 'average.assists',
'average.attackingActions', 'average.backPasses', 'average.ballLosses',
'average.ballRecoveries', 'average.corners', 'average.crosses',
'average.dangerousOpponentHalfRecoveries',
...
'total.successfulLongPasses', 'total.successfulPasses',
'total.successfulPassesToFinalThird', 'total.successfulPenalties',
'total.successfulSmartPasses', 'total.successfulThroughPasses',
'total.successfulVerticalPasses', 'total.throughPasses',
'total.verticalPasses', 'total.yellowCards'],
dtype='object', length=171)
另一个想法是将嵌套对象存储在一个系列中(您可以让字典保存这些系列)。
dfs = k: pd.Series(v) for k,v in r.json().items()
print(dfs.keys())
# ['average', 'seasonId', 'competitionId', 'positions', 'total', 'playerId', 'percent'])
print(dfs['percent'])
返回:
aerialDuelsWon 23.080
defensiveDuelsWon 18.420
directFreeKicksOnTarget 0.000
duelsWon 33.470
fieldAerialDuelsWon 23.080
goalConversion 22.581
headShotsOnTarget 0.000
offensiveDuelsWon 37.250
penaltiesConversion 0.000
shotsOnTarget 41.940
...
yellowCardsPerFoul 12.500
dtype: float64
数据只有一个条目。
【讨论】:
亲爱的 Anton, 感谢您提供多种解决方案。与您的第一个解决方案相关,如果我想从本地驱动器读取,我使用了 pd.read_csv 和文件的目标。它不起作用。您能否建议如何使用本地驱动器中的文件使用您的第一个解决方案。谢谢 @Zephyr 抱歉去吃午饭了。已更新。 谢谢安东,非常感谢。是的,数据文件只包含 1 行。但是,我是包含嵌套字典的 json 文件。我尝试了相同的方法,但数据框显示不同。如果你不介意,我也可以和你讨论一下吗? @Zephyr 请随时与我联系。 你能简单地告诉我如何展平嵌套的 json。【参考方案2】:您可以在将数据读取为字符串后将其转换为 json,然后使用pandas.read_json()
将您的 json 转换为数据帧。
例子:
import json
from pandas.io.json import json_normalize
f = open("file.txt", "w+")
contents = f.read()
contents = contents.replace("\n", "")
json_data = json.loads(contents)
df = json_normalize(json.loads(data))
之后您应该将数据作为数据框。
希望这会有所帮助!
【讨论】:
您好,我刚刚尝试过,它显示以下错误:JSONDecodeError: Expecting value: line 1 column 1 (char 0) 那是因为你的换行符。你需要去掉它,检查上面的更新答案。 你的数据也需要标准化。这将要求您使用 normalize_json 感谢 Devdob。感谢您的建议。 很高兴能帮上忙!以上是关于读取存储在文本文件中的字典并转换为熊猫数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章