J'ai un problème avec un fichier json (généré à partir de l'API Twython / Twitter).

Le fichier ressemble à ceci:

[
{
    "created_at": "Thu Mar 14 20:24:53 +0000 2019",
    "id": 1106290123426140165,
    "id_str": "1106290123426140165",
    "text": "RT @ALABDULLATIF: n@B_Al3bdullatif \n\u278b\u2026",
    "source": "<a href=\"http://twitter.com/download/android\" 
     rel=\"nofollow\">Twitter for Android</a>",
    "truncated": false,
    "in_reply_to_status_id": null,
    "in_reply_to_status_id_str": null,
    "in_reply_to_user_id": null,
    "in_reply_to_user_id_str": null,
    "in_reply_to_screen_name": null,
    "user": {
        "id": 1091414851400929286,
        "id_str": "1091414851400929286",
        "name": "u064a",
        "screen_name": "UThbZ4nwsuzAMQm",
        "location": null,
        "url": null,
        "description": null,
        "translator_type": "none",
        "protected": false,
        "verified": false,
        "followers_count": 0,
        "friends_count": 0,
        "listed_count": 0,
        "favourites_count": 0,
        "statuses_count": 2,
        "created_at": "Fri Feb 01 19:15:52 +0000 2019",
        "utc_offset": null,
        "time_zone": null,
        "geo_enabled": false,
        "lang": "en",
        "contributors_enabled": false,
        "is_translator": false,
        "profile_background_color": "F5F8FA",
        ETC

Quand j'essaye de le lire avec ceci:

fname = "tweets_03.json" 

text=[]
retweets=[]
language=[]
followers=[]

with open(fname, 'r') as f:
    for line in f:
        if not line.isspace():
            tweet = json.loads(line)
            text.append(tweet.get('text', ''))
            retweets.append(tweet.get('retweet_count',''))
            language.append(tweet.get('lang',''))
            followers.append(tweet.get('followers_count',''))

text=pd.DataFrame(text)
text.columns=['text']
retweets=pd.DataFrame(retweets)
retweets.columns=['retweets']
language=pd.DataFrame(language)
language.columns=['language']
followers=pd.DataFrame(followers)
followers.columns=['followers']

df=pd.concat([text,retweets,language,followers],axis=1)
df.head(5)

J'obtiens le message d'erreur suivant:

JSONDecodeError: Expecting value: line 2 column 1 (char 2)

J'ai aussi essayé:

data = "tweets_03.json" 
jdata = json.loads(data)
df = pd.DataFrame(jdata)

Et cela me donne l'erreur suivante:

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Si quelqu'un pouvait nous aider, ce serait très apprécié. Je veux convertir les données en un cadre de données. Merci Meilleurs voeux

1
tezzaaa 15 mars 2019 à 15:15

2 réponses

Meilleure réponse

Le problème est que votre fichier json est en fait plusieurs fichiers json en 1. Vous devez les séparer et les lire.

La façon dont je l'ai fait a été de trouver toutes ces ][ instances et de les séparer. Ensuite, parcourez simplement chacun de ceux à charger, puis sauvegardez-les dans une trame de données. C'est assez compliqué, car il contient des dictionnaires et des listes imbriqués. Mais cela va générer une trame de données pour vous.

import pandas as pd
import json

data = []
with open('tweets_03.json') as json_file:  
    data_str = json_file.read()
    data_str = data_str.split('[',1)[-1]
    data_str = data_str.rsplit(']',1)[0]
    data_str = data_str.split('][')

for jsonStr in data_str:
    jsonStr = '[' + jsonStr + ']'

    temp_data = json.loads(jsonStr)
    for each in temp_data:
        data.append(each)

df = pd.DataFrame(data)

Sortie:

print (df)
    contributors                        ...                                                                       user
0           None                        ...                          {'id': 427643942, 'id_str': '427643942', 'name...
1           None                        ...                          {'id': 1063556070151528449, 'id_str': '1063556...
2           None                        ...                          {'id': 924769730606567424, 'id_str': '92476973...
3           None                        ...                          {'id': 287355962, 'id_str': '287355962', 'name...
4           None                        ...                          {'id': 2908153155, 'id_str': '2908153155', 'na...
5           None                        ...                          {'id': 1040181804026744832, 'id_str': '1040181...
6           None                        ...                          {'id': 397901665, 'id_str': '397901665', 'name...
7           None                        ...                          {'id': 14547327, 'id_str': '14547327', 'name':...
8           None                        ...                          {'id': 1159572698, 'id_str': '1159572698', 'na...
9           None                        ...                          {'id': 3025332991, 'id_str': '3025332991', 'na...
10          None                        ...                          {'id': 926921371065647104, 'id_str': '92692137...
11          None                        ...                          {'id': 428415680, 'id_str': '428415680', 'name...
12          None                        ...                          {'id': 1040967562442551301, 'id_str': '1040967...
13          None                        ...                          {'id': 984957304905744385, 'id_str': '98495730...
14          None                        ...                          {'id': 24174895, 'id_str': '24174895', 'name':...
15          None                        ...                          {'id': 543254812, 'id_str': '543254812', 'name...
16          None                        ...                          {'id': 377146136, 'id_str': '377146136', 'name...
17          None                        ...                          {'id': 63308004, 'id_str': '63308004', 'name':...
18          None                        ...                          {'id': 3039612566, 'id_str': '3039612566', 'na...
19          None                        ...                          {'id': 2902946418, 'id_str': '2902946418', 'na...
20          None                        ...                          {'id': 966776807830716416, 'id_str': '96677680...
21          None                        ...                          {'id': 1017086923507040256, 'id_str': '1017086...
22          None                        ...                          {'id': 888271500658081792, 'id_str': '88827150...
23          None                        ...                          {'id': 1085986810591932419, 'id_str': '1085986...
24          None                        ...                          {'id': 720061374999568384, 'id_str': '72006137...
25          None                        ...                          {'id': 21243436, 'id_str': '21243436', 'name':...
26          None                        ...                          {'id': 2849771796, 'id_str': '2849771796', 'na...
27          None                        ...                          {'id': 790823048744165376, 'id_str': '79082304...
28          None                        ...                          {'id': 881673927927496704, 'id_str': '88167392...
29          None                        ...                          {'id': 4344166641, 'id_str': '4344166641', 'na...
..           ...                        ...                                                                        ...
942         None                        ...                          {'id': 306237570, 'id_str': '306237570', 'name...
943         None                        ...                          {'id': 883298986739748864, 'id_str': '88329898...
944         None                        ...                          {'id': 3027274443, 'id_str': '3027274443', 'na...
945         None                        ...                          {'id': 3189578162, 'id_str': '3189578162', 'na...
946         None                        ...                          {'id': 2327121601, 'id_str': '2327121601', 'na...
947         None                        ...                          {'id': 990411876, 'id_str': '990411876', 'name...
948         None                        ...                          {'id': 2995641808, 'id_str': '2995641808', 'na...
949         None                        ...                          {'id': 44540580, 'id_str': '44540580', 'name':...
950         None                        ...                          {'id': 47636922, 'id_str': '47636922', 'name':...
951         None                        ...                          {'id': 996052119433048064, 'id_str': '99605211...
952         None                        ...                          {'id': 806255305474641920, 'id_str': '80625530...
953         None                        ...                          {'id': 66738256, 'id_str': '66738256', 'name':...
954         None                        ...                          {'id': 1068149370229542912, 'id_str': '1068149...
955         None                        ...                          {'id': 229965328, 'id_str': '229965328', 'name...
956         None                        ...                          {'id': 1039247810410016769, 'id_str': '1039247...
957         None                        ...                          {'id': 4886141236, 'id_str': '4886141236', 'na...
958         None                        ...                          {'id': 892138074, 'id_str': '892138074', 'name...
959         None                        ...                          {'id': 134945640, 'id_str': '134945640', 'name...
960         None                        ...                          {'id': 300694818, 'id_str': '300694818', 'name...
961         None                        ...                          {'id': 840240258, 'id_str': '840240258', 'name...
962         None                        ...                          {'id': 265481826, 'id_str': '265481826', 'name...
963         None                        ...                          {'id': 1082113676344098816, 'id_str': '1082113...
964         None                        ...                          {'id': 229965328, 'id_str': '229965328', 'name...
965         None                        ...                          {'id': 4634960663, 'id_str': '4634960663', 'na...
966         None                        ...                          {'id': 161350829, 'id_str': '161350829', 'name...
967         None                        ...                          {'id': 1003363328641716225, 'id_str': '1003363...
968         None                        ...                          {'id': 898601924630597636, 'id_str': '89860192...
969         None                        ...                          {'id': 3285036854, 'id_str': '3285036854', 'na...
970         None                        ...                          {'id': 1099846021952294912, 'id_str': '1099846...
971         None                        ...                          {'id': 34326169, 'id_str': '34326169', 'name':...

[972 rows x 36 columns]
2
chitown88 15 mars 2019 à 14:04
import pandas as pd

fileName = 'tweets_03.json'
jsonData = pd.read_json(fileName,lines=True)
0
oreopot 15 mars 2019 à 12:42