读取存储在文本文件中的字典并转换为熊猫数据框

时间:2018-10-12 14:48:29

标签: python pandas dictionary

我有一个文本文件,其中包含字典形式的一系列数据。 我想在熊猫中读取和存储为数据框。 我将如何阅读。 我读了pd.csv,但它没有给我数据框。 有人可以帮我吗? 您可以下载文本文件Here

谢谢

Zep,

2 个答案:

答案 0 :(得分:1)

您可以在将数据读取为字符串后将数据转换为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))

之后,您应该将数据作为数据框。

希望这会有所帮助!

答案 1 :(得分: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)

另一种想法是将嵌套对象存储在一个Series中(并且您可以让字典保存该系列)。

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

虽然数据只有一个条目。

相关问题