Pandas with various length arrays

This is the code I have. Due to the content of the raw data that needs to be parsed, I end up with a "user list" and a "list of tweets" that have different lengths. When writing lists as columns in a data frame, I get ValueError: arrays must all be same length. I understand this, but was looking for a way around it by typing 0or NaNin the right places of the shorter array. Any ideas?

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)
+4
source share
2 answers

I'm not sure if this is exactly what you want, but anyway:

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

Try the following:

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

After that, you should transfer your frame with:

frame = frame.transpose()

Then you can export to csv:

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

All Articles