2017-07-20 1 views
0

ich eine test.dat-Datei, die diese 5 Spalte enthält:Verschieben json Spalte in csv auf eine andere Datei mit Python

  • [ 'user_id', 'ITEM_ID', 'Stern', 'scraping_time' , 'tweet_in_json_format']

ich möchte Verschieben diese drei Spalten test2.csv:

  • [ 'User_id', 'scraping_time', 'tweet_in_json_format']

Hier ist ein Beispiel für eine Reihe von test.dat:

user_id,item_id,rating,scraping_time,tweet_in_json_format 
819099800,0993846,10,1391278544,{"contributors": null, "truncated": false, "text": "", "in_reply_to_status_id": null, "id": 426902385735520256, "favorite_count": 0, "source": "<a href=\"http://itunes.apple.com/us/app/imdb-movies-tv/id342792525?mt=8&uo=4\" rel=\"nofollow\">IMDb Movies & TV on iOS</a>", "retweeted": false, "coordinates": null, "entities": {"symbols": [], "user_mentions": [], "hashtags": [{"indices": [61, 66], "text": "IMDb"}], "urls": [{"url": "http://tweeter.com/xQuwO8KJP1", "indices": [38, 60], "expanded_url": "http://www.imdb.com/title/tt0993846", "display_url": "imdb.com/title/tt0993846"}]}, "in_reply_to_screen_name": null, "id_str": "426902385735520256", "retweet_count": 0, "in_reply_to_user_id": null, "favorited": false, "user": {"follow_request_sent": false, "profile_use_background_image": true, "id": 819099800, "verified": false, "profile_text_color": "333333", "profile_image_url_https": "https://pbs.twimg.com/profile_images/420936276607791104/KVrTuNU9_normal.jpeg", "profile_sidebar_fill_color": "DDEEF6", "is_translator": false, "geo_enabled": false, "entities": {"description": {"urls": []}}, "followers_count": 116, "protected": false, "location": "in my dreams ", "default_profile_image": false, "id_str": "819099800", "lang": "ar", "utc_offset": -36000, "statuses_count": 1169, "description": "\u0646\u0628\u0649 \u0627\u0644\u0623\u062c\u0631 .", "friends_count": 86, "profile_link_color": "0084B4", "profile_image_url": "http://pbs.twimg.com/profile_images/420936276607791104/KVrTuNU9_normal.jpeg", "notifications": false, "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/812779345/23ae1c7da01b05a6d5d9b0be28fe14c9.jpeg", "profile_background_color": "C0DEED", "profile_banner_url": "https://pbs.twimg.com/profile_banners/819099800/1390618207", "profile_background_image_url": "http://a0.twimg.com/profile_background_images/812779345/23ae1c7da01b05a6d5d9b0be28fe14c9.jpeg", "name": "vivo per lei ", "is_translation_enabled": false, "profile_background_tile": false, "favourites_count": 155, "screen_name": "Orkida__", "url": null, "created_at": "Wed Sep 12 08:08:06 +0000 2012", "contributors_enabled": false, "time_zone": "Hawaii", "profile_sidebar_border_color": "C0DEED", "default_profile": false, "following": false, "listed_count": 0}, "geo": null, "in_reply_to_user_id_str": null, "possibly_sensitive": false, "lang": "en", "created_at": "Sat Jan 25 02:20:34 +0000 2014", "in_reply_to_status_id_str": null, "place": null} 

Das Problem ist, dass the'tweet_in_json_format‘ist json und Pandas kann nicht in eine Spalte betrachten ....

Wie kann ich das tun?

+1

json in string konvertieren? – faboolous

+2

JSON ist eine Zeichenfolge. Was ist das Problem? –

+0

@faboolous nein, diese JSON-Spalte sollte als Teil des Datenrahmens in Pandas gelesen werden. zum Beispiel df [4] repräsentiert als "tweet_in_json_format" Spalte – Hossein

Antwort

1

Ihr Hauptproblem besteht darin, dass Ihre Eingabe nicht CSV ist - wenn dies der Fall wäre, müssten die JSON-Daten in der letzten Spalte in Anführungszeichen gesetzt werden, so dass ihre internen Kommas nicht als CSV-Trennzeichen interpretiert werden.

Wenn Sie einfach die von Ihnen beschriebene Transformation ausführen möchten, können Sie sicher sein, dass das Eingabeformat unverändert bleibt (dh Benutzer-ID, Element-ID, Bewertung, Scraping-Zeit und JSON-Daten in dieser Reihenfolge, getrennt durch Kommas). , so kann dies relativ einfach erreicht werden, ohne dass Pandas (die für den Job wirklich übertrieben ist):

with open('test.dat') as f_in, open('test2.csv', 'w') as f_out: 
    for line in f_in: 
     parts = line.split(',', 4) 
     f_out.write('{},{},{}\n'.format(parts[0], parts[3], parts[4])) 

kurz gesagt, ist dies die Ein- und Ausgabedateien öffnet, dann für jede Zeile in der Eingabedatei teilt sie ihm höchstens viermal über die Kommas, die die Zeile in ihre verschiedenen Felder trennt, ohne den JSON zu verfälschen. Es schreibt dann das erste, vierte und fünfte Feld (entsprechend Benutzer-ID, Scraping-Zeit und JSON-Daten) in die Ausgabedatei, getrennt durch Kommas.

Bitte beachten Sie, dass dies eine leicht brüchige Lösung ist, da es bei einer Änderung der Spaltenreihenfolge bricht.

+0

danke, es hat richtig funktioniert – Hossein

Verwandte Themen