【问题标题】:列存储为列表;如何在 pandas python 中拆分为 COLUMNS?
【发布时间】:2022-01-23 12:28:56
【问题描述】:

假设“标签”列如下所示;如何拆分为多列或设置为一个列表?

desired as " 合并为 List 并过滤掉重复项

"Tags"
['Saudi', 'law', 'Saudi Arabia', 'rules']
['Hindi', 'Tamil', 'imposition', 'cbse', 'neet', 'Tamil Nadu', 'India']
['Stephen', 'Hawkins', 'Tamil', 'predictions', 'future', 'science', 'scientist', 'top 5', 'five']
['Bigg Boss', 'Tamil', 'Kamal', 'big', 'boss']
['Mary', 'real', 'story', 'Tamil', 'history']
['football', 'Tamil', 'FIFA', '2018', 'world cup', 'MG', 'top', '10', 'ten']
['India', 'Tamil', 'poor', 'rich', 'money', 'MG', 'why', 'Indians']

【问题讨论】:

  • 您能否提供一个示例输出以使其清楚?
  • 假设,“标签”列存储如下; ['thamizh','kannada','karnataka','bangalore','mysore','bengaluru','Bengaluru','malayalam','kerala','chennai','yash','kgf','歌曲','卡纳达语歌曲','新闻','今天'] ['歌曲','卡纳达语歌曲','新闻','今天'] ['迈索尔','班加罗尔','班加罗尔','马拉雅拉姆语' ,] 我想合并在一个列表中,然后过滤掉重复项。

标签: python python-3.x pandas dataframe


【解决方案1】:

如果需要不重复的列表,如果性能很重要,请使用带有 set 的集合理解:

L = list(set(y for x in df['Tags'] for y in x))

如果可能的话,像使用字符串一样保存lists:

import ast

L = list(set(y for x in df['Tags'].dropna() for y in ast.literal_eval(x)))

print (L)
['FIFA', 'Mary', 'world cup', 'rich', 'story', 'Tamil', 'rules', 'neet', 'money', 'Kamal', 'Hindi', 'big', 'cbse', 'imposition', 'football', 'MG', 'history', 'predictions', 'why', 'Tamil Nadu', 'top 5', 'ten', '10', 'Bigg Boss', 'India', 'Stephen', 'top', 'poor', 'law', 'Saudi', 'real', 'Indians', 'future', 'boss', 'five', '2018', 'scientist', 'Saudi Arabia', 'science', 'Hawkins']

【讨论】:

  • 假设,“标签”列存储如下; ['thamizh','kannada','karnataka','bangalore','mysore','bengaluru','Bengaluru','malayalam','kerala','chennai','yash','kgf','歌曲','卡纳达语歌曲','新闻','今天'] ['歌曲','卡纳达语歌曲','新闻','今天'] ['迈索尔','班加罗尔','班加罗尔','马拉雅拉姆语' ,] 我想合并到一个列表中,然后过滤掉重复项。
  • @Karthikeyan -so L = list(set([y for x in df['Tags'] for y in x])) 失败?答案已编辑。
  • print(list(set([y for x in data['Tags'] for y in x]))) TypeError: 'float' object is not iterable
  • import ast print(list(set(y for x in data['Tags'] for y in ast.literal_eval(x)))) ValueError: malformed node or string: nan 列本身包含 Nan值而不是列表
  • @Karthikeyan 你能试试L = list(set(y for x in df['Tags'].dropna() for y in ast.literal_eval(x)))吗?
【解决方案2】:

您可以展平列表并使用set()

out = []
for lst in df['Tags'].tolist():
    out.extend(lst)

out = list(set(out))

输出:

['cbse', '2018', 'future', 'India', '10', 'Indians', 'money', 
'Hindi', 'rules', 'poor', 'Kamal', 'neet', 'top 5', 'world cup', 
'five', 'law', 'ten', 'Stephen', 'Tamil', 'Mary', 'Bigg Boss', 
'top', 'scientist', 'boss', 'Saudi Arabia', 'big', 'real', 'story', 
'why', 'Hawkins', 'predictions', 'football', 'rich', 'science', 
'imposition', 'Saudi', 'FIFA', 'history', 'Tamil Nadu', 'MG']

以下列表使用相同的代码:

lsts = [['thamizh', 'kannada', 'karnataka', 'bangalore', 'mysore', 
'bengaluru', 'Bengaluru', 'malayalam', 'kerala', 'chennai', 'yash',
 'kgf', 'songs', 'kannada songs', 'news', 'today'], 
 ['songs', 'kannada songs', 'news', 'today'], 
['mysore', 'bengaluru', 'Bengaluru', 'malayalam',]]

输出:

['today', 'songs', 'malayalam', 'bangalore', 'karnataka', 'kerala', 
'bengaluru', 'mysore', 'kgf', 'Bengaluru', 'chennai', 'yash', 
'thamizh', 'kannada', 'news', 'kannada songs']

【讨论】:

    【解决方案3】:

    试试:

    df["Tags"].explode().unique()
    

    或者:

    np.unique(df["Tags"].sum())
    

    编辑:

    也许你需要:

    import ast
    df["Tags"].apply(ast.literal_eval).explode().unique()
    

    【讨论】:

    • 假设,“标签”列存储如下列表; ['thamizh','kannada','karnataka','bangalore','mysore','bengaluru','Bengaluru','malayalam','kerala','chennai','yash','kgf','歌曲','卡纳达语歌曲','新闻','今天'] ['歌曲','卡纳达语歌曲','新闻','今天'] ['迈索尔','班加罗尔','班加罗尔','马拉雅拉姆语' ,] 我想合并到一个列表中,然后过滤掉重复项。
    猜你喜欢
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2018-05-28
    • 2016-05-31
    • 1970-01-01
    相关资源
    最近更新 更多