Проблема здесь не в строках данных, а в самом tweet_data. Если вы проверите свои tweet_data, вы найдете еще один элемент, имеющий тип данных 'int' ( при условии, что ваш tweet_data представляет собой список словарей, поскольку он ожидает только "dict или list of dicts" ).
Возможно, вы захотите проверить данные твита, чтобы удалить значения, отличные от словарей.
Мне удалось воспроизвести приведенный ниже пример для json_normalize документа :
Рабочий пример:
from pandas.io.json import json_normalize
data = [{'state': 'Florida',
'shortname': 'FL',
'info': {
'governor': 'Rick Scott'
},
'counties': [{'name': 'Dade', 'population': 12345},
{'name': 'Broward', 'population': 40000},
{'name': 'Palm Beach', 'population': 60000}]},
{'state': 'Ohio',
'shortname': 'OH',
'info': {
'governor': 'John Kasich'
},
'counties': [{'name': 'Summit', 'population': 1234},
{'name': 'Cuyahoga', 'population': 1337}]},
]
json_normalize(data)
Выход:
Отображение данных
Ошибка воспроизведения:
from pandas.io.json import json_normalize
data = [{'state': 'Florida',
'shortname': 'FL',
'info': {
'governor': 'Rick Scott'
},
'counties': [{'name': 'Dade', 'population': 12345},
{'name': 'Broward', 'population': 40000},
{'name': 'Palm Beach', 'population': 60000}]},
{'state': 'Ohio',
'shortname': 'OH',
'info': {
'governor': 'John Kasich'
},
'counties': [{'name': 'Summit', 'population': 1234},
{'name': 'Cuyahoga', 'population': 1337}]},
1 # *Added an integer to the list*
]
result = json_normalize(data)
Ошибка:
AttributeError: 'int' object has no attribute 'items'
Как удалить "tweet_data" : Не требуется, если вы следите за обновлением ниже
Перед нормализацией запустите ниже:
tweet_data = [tweet for tweet in tweet_data if isinstance(tweet, dict)]
Обновление: (для цикла)
for line in tweets_file:
try:
tweet = json.loads(line)
if isinstance(tweet, dict):
tweet_data.append(tweet)
except:
continue