具有不同长度数组的熊猫

Posted

技术标签:

【中文标题】具有不同长度数组的熊猫【英文标题】:Pandas with different length arrays 【发布时间】:2015-05-02 03:19:38 【问题描述】:

这是我的代码。由于要解析的原始数据的内容,我最终得到的“用户列表”和“推文列表”的长度不同。将列表写为数据框中的列时,我得到ValueError: arrays must all be same length。我意识到这一点,但一直在寻找一种解决方法,在较短数组的正确位置打印0NaN。有任何想法吗?

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)

【问题讨论】:

这能回答你的问题吗? Creating dataframe from a dictionary where entries have different lengths 这个问题应该是重复的,因为重点是从dict创建数据框,包含不均匀的arraysdata = 'tweet' : tweetlist, 'user' : userlistframe = pandas.DataFrame(data)。重复的人回答了这个问题并且有一个被接受的答案。 【参考方案1】:

您可以通过编写此代码制作数据框轻松解决此问题。

dict_df = pd.DataFrame( key:pd.Series(value) for key, value in Sl.items() )

【讨论】:

【参考方案2】:

试试这个:

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

之后,您应该使用以下方式转置您的框架:

frame = frame.transpose()

然后就可以导出为csv了:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

这绕过了错误,但它会将所有的 NaN 放在推文列表的底部,从而弄乱了列之间的匹配。寻找一种方法让 NaN 分布在正确的行号上。如果找不到文本,也许可以通过某种方式让for text in chunk: 循环打印 NaN? 你解析什么?登录后来自 twiiter.com 的原始 html? 为什么要使用两个独立的 for 循环?我没有正确测试这段代码,但它应该可以工作:gist.github.com/anonymous/d290798359625804af5f 是的!太感谢了。这完全符合我的要求! 在 Python3 中使用 .items() 而不是 .iteritems()

以上是关于具有不同长度数组的熊猫的主要内容,如果未能解决你的问题,请参考以下文章

gfortran 不允许具有不同组件长度的字符数组

如何合并/连接两个不同长度的熊猫数据框?

熊猫,比较不同长度的数据帧的值*范围*并写回原始 df

熊猫在不同长度的列上合并两个数据框

C ++以0(n + m)复杂度搜索具有不同长度的多个数组的交集

我有一个基于所选城市长度不同的对象数组。如何选择包含具有特定属性的对象的元素?