如何将Pandas DataFrame转换为字符串构成的嵌套列表?
解决DataFrame转字符串嵌套列表的问题
我来帮你搞定这个需求!你想要把给定的两行DataFrame转换成全字符串组成的嵌套列表,但之前的循环方法没达到预期,问题出在遍历对象上——你遍历的是DataFrame的列,而不是行,所以输出的是每一列的元素列表,不是按行分组的结构。
先还原你的DataFrame结构
假设你的DataFrame是这样创建的:
import pandas as pd data = { 'date': ['2018-03-21', '2018-03-21'], 'metric': ['cpu', 'cpu'], 'stat': ['mean', 'std'], 'val': [76.724406, 124.285789], 'device': ['10.41.100.1', '10.41.100.1'] } df = pd.DataFrame(data)
正确的两种实现方法
方法一:逐行转换为字符串列表(直观易懂)
用apply遍历每一行,先把该行所有元素转成字符串,再转成列表,最后把所有行的列表汇总成嵌套结构:
lis = df.apply(lambda row: row.astype(str).tolist(), axis=1).tolist() print(lis)
输出结果完全符合你的要求:
[["2018-03-21", "cpu", "mean", "76.724406", "10.41.100.1"], ["2018-03-21", "cpu", "std", "124.285789", "10.41.100.1"]]
方法二:先全量转字符串再转列表(更简洁高效)
先把整个DataFrame的所有元素统一转成字符串类型,再用values.tolist()直接生成嵌套列表:
# 先将DataFrame所有元素转为字符串 df_str = df.astype(str) # 转换为嵌套列表 lis = df_str.values.tolist()
这个方法逻辑更简单,处理大数据量时效率也更高。
为什么你的原代码没效果?
当你写for i in df时,i会依次取DataFrame的列名(date、metric、stat、val、device),所以df[i].tolist()会输出每一列的元素列表,最终得到的是5个独立的列列表,而不是按行分组的嵌套结构,这就和你的预期不符啦。
内容的提问来源于stack exchange,提问作者Souvik Ray
相关产品推荐
相关产品推荐

