如何访问列表中的元素并将它们存储为数据帧中的新列?

How to access elements inside a list and store them as new columns in the dataframe?

提问人:brins 提问时间:8/26/2023 更新时间:8/26/2023 访问量:40

问:

我有以下数据帧

DF (英语)

关键字
[(引起患者,0.4807),(WA non,0.1332),(2021,-0.0076)]
[(不正确的重构,0.9084),(错误,0.5304),(不正确,0.2877)]

列名是关键字,需要用“”拆分,并且必须生成新列,例如:keyword_1、keyword_2、keyword_3

所以我的 DF 应该看起来像

预期数据帧

keyword_1 keyword_2 keyword_3
(引起患者,0.4807) (西澳非,0.1332) (2021, -0.0076)
(不正确的重构,0.9084) (错误,0.5304) (不正确,0.2877)

我尝试了以下方法:

new_col_list = ['first_keyword', 'second_keyword', 'third_keyword'] for n,col in enumerate(new_col_list): df[col] = df['keywords'].apply(lambda keywords: keywords[n])

df = df('keywords',axis=1)

但它抛给我错误:IndexError:列出索引超出范围

如何实现预期的数据帧?

Python Pandas 数据帧 列表 元组

评论


答:

0赞 Musabbir Arrafi 8/26/2023 #1

这是您的解决方案:

new_df = pd.DataFrame(columns=[f"keywords_{i+1}" for i in range(len(df["Keywords"].iloc[0]))])
    
for row_idx, col in enumerate(df['Keywords']):
    new_df.loc[row_idx] = col

print(new_df)

输出:

                            keyword_1         keyword_2            keyword_3
0            (caused patient, 0.4807)  (wa non, 0.1332)      (2021, -0.0076)
1  (incorrect reconstitution, 0.9084)   (error, 0.5304)  (incorrect, 0.2877)
0赞 ragas 8/26/2023 #2

另一种选择:

df[['keyword1', 'keyword2', 'keyword3']] = pd.DataFrame(df['keywords'].tolist(), index=df.index)


print(df)




                           keyword1          keyword2             keyword3  
0            (caused patient, 0.4807)  (wa non, 0.1332)      (2021, -0.0076)  
1  (incorrect reconstitution, 0.9084)   (error, 0.5304)  (incorrect, 0.2877)  

评论

0赞 Musabbir Arrafi 8/26/2023
这是一个硬编码的解决方案,考虑原始 DataFrame 的条目是否不同
0赞 ragas 8/26/2023
@MusabbirArrafi:然后添加新的列名。循环不是一个好的选择。如果您有 1M 行数据,则您的代码将运行很长时间。