2015-03-01 5 views
4

Это код, который у меня есть. Из-за содержания сырых данных, которые нужно разобрать, я заканчиваю тем, что «список пользователей» и «список твитов» имеют разную длину. При записи списков в виде столбцов в фрейме данных я получаю 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) 

ответ

7

Я не уверен, что это именно то, что вы хотите, но в любом случае:

d = dict(tweets=tweetlist, users=userlist) 
pandas.DataFrame({k : pandas.Series(v) for k, v in d.iteritems()}) 
+0

Это обходит ошибку, но она будет помещать все NaN в нижнюю часть списка твитов, испорчая соответствие между столбцами. Ищете способ получить распространение NaN по номерам их правильных номеров. Может быть, каким-то образом получить 'for text in chunk: 'цикл для печати NaN, если он не найдет текст? – textnet

+0

Что вы разбираете? Raw html от twiiter.com после входа? –

+0

Да, это правильно! – textnet

1

Попробуйте это:

frame = pandas.DataFrame.from_dict(d, orient='index') 

После этого, вы должны перенести рамку с:

frame = frame.transpose() 

Тогда вы можете экспортировать в csv:

frame.to_csv('#parsed.csv', index=False) 
+0

, который работал для меня. большое спасибо! –

Смежные вопросы