2016-04-07 2 views
0

Я пытаюсь следовать учебник по добыче твиттер данных, шаги эмулироваться как выглядит следующим образом:Twitter TypeError: «INT» объект не имеет атрибута «__getitem__»

tweets_data_path = '/home/ambijat/ipythonnbs/twitter/twitter_data.txt' 
    tweet_data = [] 
tweets_file = open(tweets_data_path, "r") 
for line in tweets_file: 
try: 
    tweet = json.loads(line) 
    tweet_data.append(tweet) 
except: 
    continue 

И потом:

tweets = pd.DataFrame() 
    tweets['text'] = map(lambda tweet: tweet['text'], tweet_data) 
    tweets['lang'] = map(lambda tweet: tweet['lang'], tweet_data) 
    tweets['country'] = map(lambda tweet: tweet['place']['country'] if tweet['place'] != None else None, tweet_data) 

И результат:

--------------------------------------------------------------------------- 
    TypeError         Traceback (most recent call last) 
    <ipython-input-9-a42fce63cc05> in <module>() 
    1 tweets = pd.DataFrame() 
----> 2 tweets['text'] = map(lambda tweet: tweet['text'], tweet_data) 
    3 tweets['lang'] = map(lambda tweet: tweet['lang'], tweet_data) 
    4 tweets['country'] = map(lambda tweet: tweet['place']['country'] if tweet['place'] != None else None, tweet_data) 

    <ipython-input-9-a42fce63cc05> in <lambda>(tweet) 
    1 tweets = pd.DataFrame() 
    ----> 2 tweets['text'] = map(lambda tweet: tweet['text'], tweet_data) 
    3 tweets['lang'] = map(lambda tweet: tweet['lang'], tweet_data) 
    4 tweets['country'] = map(lambda tweet: tweet['place']['country'] if tweet['place'] != None else None, tweet_data) 

    TypeError: 'int' object has no attribute '__getitem__' 

Может кто-то пожалуйста, помогите мне в поиске моей ошибки я нахожусь практически новичок.

+0

Вы можете добавить образец данных? – jezrael

+0

Ссылка не работает - Ошибка 404 – jezrael

+0

[https://drive.google.com/open?id=0B9u5ditNO9FEMzVleHFmMXhUVTQ] Я проверил ее снова, пожалуйста, посмотрите. –

ответ

1

Вы можете также непосредственно передать tweet_data список в json_normalize:

from pandas.io.json import json_normalize  
tweets = json_normalize(tweet_data)[["text", "lang", "place.country"]] 

    text            lang place.country 
0 This not the 1st. They hv 1 in Faisalabad alre... en  پاکستان 
1 RT @TOLOnews: Pakistan Trying To Create Third ... en  NaN 
2 RT @murtazasolangi: JuD establishes parallel "... en  NaN 
+0

Вау, очень приятно. – jezrael

+0

Благодаря тому, что я выяснил еще одну вещь, настоящая причина, почему моя вставленная цитата не работала, заключалась в том, что у меня были некоторые данные (цифры) мусора в первых двух строках текстового файла, собирая все твиты. Я удалил эти первые две строки, а затем код работал нормально. –

+0

У меня есть еще немного задач, я хочу сохранить вывод из запуска ячейки 'tweets ['country']' в текстовый файл. Это дает мне вывод примерно так: Выход усечен. Выход отключается, я хочу весь вывод. Я использую '%% capture cap --no-stderr твиты ['country'] с открытым ('output.txt', 'w') как f: f.write (cap.stdout)' –