Это код, который у меня есть. Из-за содержания сырых данных, которые нужно разобрать, я заканчиваю тем, что «список пользователей» и «список твитов» имеют разную длину. При записи списков в виде столбцов в фрейме данных я получаю ValueError: arrays must all be same length
. Я понимаю это, но искал способ обойти его, напечатав 0
или NaN
в правильных местах более короткого массива. Есть идеи?Pandas с различными размерами массивов
import pandas
from bs4 import BeautifulSoup
soup = BeautifulSoup(open('#raw.html'))
chunk = soup.find_all('div', class_='content')
userlist = []
tweetlist = []
for tweet in chunk:
username = tweet.find_all(class_='username js-action-profile-name')
for user in username:
user2 = user.get_text()
userlist.append(user2)
for text in chunk:
tweets = text.find_all(class_='js-tweet-text tweet-text')
for tweet in tweets:
tweet2 = tweet.get_text().encode('utf-8')
tweetlist.append('|'+tweet2)
print len(tweetlist)
print len(userlist)
#MAKE A DATAFRAME WITH THIS
data = {'tweet' : tweetlist, 'user' : userlist}
frame = pandas.DataFrame(data)
print frame
# Export dataframe to csv
frame.to_csv('#parsed.csv', index=False)
Это обходит ошибку, но она будет помещать все NaN в нижнюю часть списка твитов, испорчая соответствие между столбцами. Ищете способ получить распространение NaN по номерам их правильных номеров. Может быть, каким-то образом получить 'for text in chunk: 'цикл для печати NaN, если он не найдет текст? – textnet
Что вы разбираете? Raw html от twiiter.com после входа? –
Да, это правильно! – textnet