Python 不同长度数组的熊猫

Python 不同长度数组的熊猫,python,arrays,pandas,dataframe,Python,Arrays,Pandas,Dataframe,这是我的密码。由于要解析的原始数据的内容,我最终得到了不同长度的“用户列表”和“tweet列表”。当将列表作为数据帧中的列写入时,我得到ValueError:数组的长度必须相同。我意识到这一点,但一直在寻找解决方法,在较短数组的正确位置打印0或NaN。有什么想法吗 import pandas from bs4 import BeautifulSoup soup = BeautifulSoup(open('#raw.html')) chunk = soup.find_all('div', clas

这是我的密码。由于要解析的原始数据的内容,我最终得到了不同长度的“用户列表”和“tweet列表”。当将列表作为数据帧中的列写入时,我得到
ValueError:数组的长度必须相同。我意识到这一点,但一直在寻找解决方法,在较短数组的正确位置打印
0
NaN
。有什么想法吗

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)

我不确定这是否正是您想要的,但无论如何:

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

frame = pandas.DataFrame.from_dict(d, orient='index')
在此之后,您应该使用以下方法转置帧:

frame = frame.transpose()
然后可以导出到csv:

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

这绕过了错误,但它会将所有NaN放在tweet列表的底部,搞乱列之间的匹配。正在寻找一种方法,使南部的分布在正确的行号上。也许可以通过某种方式获得区块中文本的
循环,如果没有找到文本,则打印NaN?您将解析什么?登录twiiter.com后的原始html?为什么使用两个单独的for循环?我没有正确测试这段代码,但它应该可以工作:是的!非常感谢你。这正是我想要的!对Python 3使用
.items()
而不是
.iteritems()
,这是否回答了您的问题?这个问题应该是重复的,因为主要的问题是从包含不均匀数组的
dict
创建数据帧
data={'tweet':tweetlist,'user':userlist}
frame=pandas.DataFrame(data)
。副本回答了这个问题,并且有一个可接受的答案。