Python 用列中的列表整理数据框的最佳方法
我有一个不整洁的Tweet对象数据框。有两列包含列表:Python 用列中的列表整理数据框的最佳方法,python,python-3.x,pandas,dataframe,scikit-learn,Python,Python 3.x,Pandas,Dataframe,Scikit Learn,我有一个不整洁的Tweet对象数据框。有两列包含列表:hashtags和扩展URL。我试图遵循整洁的数据原则,在行/列索引中只保留1个值 编辑:此问题被标记为的副本,它只是将列表拆分为更多列。这对我不起作用,因为在一条tweet中可能有数量可变的hashtag 下面是我的tweetDataFrame的一个示例: ----------------------------------------------------------- tweet_id | hashtags | expan
hashtags
和扩展URL
。我试图遵循整洁的数据原则,在行/列索引中只保留1个值
编辑:此问题被标记为的副本,它只是将列表拆分为更多列。这对我不起作用,因为在一条tweet中可能有数量可变的hashtag
下面是我的tweet
DataFrame的一个示例:
-----------------------------------------------------------
tweet_id | hashtags | expanded_urls
-----------------------------------------------------------
123 | ['lol','bff'] | ['fakeurl.com']
124 | [] | ['url1.io', 'url2.expanded.co']
我有两种可能的方法来整理这些数据
1:只需将新行添加到数据框中,并将几乎所有行内容复制到数据框中即可:
---------------------------------------------
tweet_id | hashtag | expanded_url
---------------------------------------------
123 | 'lol' | 'fakeurl.com'
123 | 'bff' | 'fakeurl.com'
124 | '' | 'url1.io'
124 | '' | 'url2.expanded.io'
我认为这不是很有效,特别是因为会有很多插入/追加操作。然而,将单个数据帧传递到单个scikit学习模型将使事情变得非常简单
2:创建2个新数据帧:
第一种是hashtag,带有相应的tweet\u id
s:
------------------
tweet_id | hashtag
------------------
123 | `lol`
123 | `bff`
另一个是URL及其相应的tweet\u id
s:
------------------
tweet_id | url
------------------
123 | `fakeurl.com`
124 | `url1.io`
124 | `url2.expanded.co`
这看起来更干净,但我不完全确定如何修改原始数据帧;我会删除相应的列并保留3个单独的表吗?有没有一种好方法可以将这3个数据帧合并成1个数据帧,或者每次我想知道哪些hashtag与tweet关联时,我都必须进行单独的查找?我通过
df
重新分配,将空列表转换为单个空字符串的列表
两列在一起
或者没有itertools
df = df.applymap(lambda x: x if x else [''])
pd.DataFrame([
[t, h, e]
for t, h_, e_ in df.values
for h in h_ for e in e_
], columns=df.columns)
tweet_id hashtags expanded_urls
0 123 lol fakeurl.com
1 123 bff fakeurl.com
2 124 url1.io
3 124 url2.expanded.co
分别地
假设索引处于
tweet\u id
(如果不是,可以使用.set\u index()
方法),对于方法2,您可以尝试:
df['hashtags'].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('hashtag')
Result:
hashtag
tweet_id
123 lol
123 bff
类似地,对于扩展的\u URL
:
df['expanded_urls'].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('url')
结果:
url
tweet_id
123 fakeurl.com
124 url1.io
124 url2.expanded.co
您的用例是什么?将数据输入scikit模型进行预测?您将对数据执行何种处理?例如,对于每个标签,您会执行任何聚合吗?可能重复感谢您介绍了这两个示例!
df['hashtags'].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('hashtag')
Result:
hashtag
tweet_id
123 lol
123 bff
df['expanded_urls'].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('url')
url
tweet_id
123 fakeurl.com
124 url1.io
124 url2.expanded.co