Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用列中的列表整理数据框的最佳方法_Python_Python 3.x_Pandas_Dataframe_Scikit Learn - Fatal编程技术网

Python 用列中的列表整理数据框的最佳方法

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

我有一个不整洁的Tweet对象数据框。有两列包含列表:
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