【问题标题】:how to turn list of tuples to data frame with different scores如何将元组列表转换为具有不同分数的数据框
【发布时间】:2020-03-24 21:03:32
【问题描述】:

我有这样的数据,它是 gensim LDA 模型的输出

date       id   score   
1/1/2019    11  [(5,0.8), (11,0.2)] 
1/2/2019    21  [(4,0.7), (10,0.1)] 
1/3/2019    35  [(3,0.4)]   
1/4/2019    44  [(5,0.8),(3,0.5), (11,0.2)] 

结果应该是这样的。有人可以帮忙吗?

date        id  score   new_score
1/1/2019    11  5       0.8
1/1/2019    11  11      0.2
1/2/2019    21  4       0.7
1/2/2019    21  10      0.1
1/3/2019    35  3       0.4
1/4/2019    44  5       0.8
1/4/2019    44  3       0.5
1/4/2019    44  11      0.2

【问题讨论】:

  • 请在问题的文本中包含您的输入数据和首选输出,而不是图片或链接
  • 到目前为止你尝试过什么?
  • 对不起,我是新手。花一些时间来获得正确的格式

标签: python list dataframe tuples lda


【解决方案1】:

更新:

更好的方法是使用DataFrame.explode():

df = pd.read_csv('your_file_name.csv')

df = df.explode('score')
df[['score', 'new_score']] = df.score.apply(pd.Series)

您可以使用嵌套列表推导来做到这一点:

df = pd.read_csv('your_file_name.csv')

unpacked = [
    {'date': row.date, 'id': row.id, 'score': x[0], 'new_score': x[1]} 
    for _, row in df.iterrows() for x in row.score
]

df = pd.DataFrame(unpacked)

DataFrame.iterrows()为框架中的每一行返回一个索引和行内容的元组,所以你可以系统地解包:

  1. 抓取单行
  2. 将 score 元组解压缩为 score 和 new_score
  3. 将其格式化为字典中的条目(连同日期和 ID),以便从中构建新框架
  4. 遍历所有行并构建最终帧

【讨论】:

  • 让我稍微更改一下我的数据,因为我的 id 没有模式
  • @py_dust 你的id不需要有模式,你试过我贴的代码吗?它完全适用于我尝试的示例。
  • 将 explode() 函数在这里工作。让我试试你的解决方案。谢谢
  • 感谢 pciunkiewicz 的快速响应。对了,“for”后面的下划线“_”是什么意思。
  • @py_dust 下划线只是“丢弃”一个变量。由于a, b = df.iterrows() 返回两个东西,我们不关心第一个,我们可以将它分配给_ 字符以表示它是垃圾
猜你喜欢
  • 2023-03-22
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2016-12-17
  • 2015-03-11
相关资源
最近更新 更多