Python:如何从多个列表变量生成指定结构的Pandas DataFrame
解决方案
你的问题出在eu_5dstats和gu_5dstats的结构上——你给它们套了额外一层列表([stats_list(...)]),导致数据嵌套层级不对,pandas无法正确解析成两行7列的结构。
具体修复方法
方法1:直接解开外层嵌套列表
如果保持原变量定义不变,构造DataFrame时取列表的第一个元素(也就是stats_list返回的7元素列表):
import pandas as pd columns = ['ticker', 'avg range', 'std of range', '0.5 std range', 'median range', 'highest range', 'lowest range'] eu_5dstats = [stats_list("EUR_USD","D",5)] gu_5dstats = [stats_list("GBP_USD","D",5)] # 取每个变量的第一个元素(即实际的7元素统计列表) table = pd.DataFrame([eu_5dstats[0], gu_5dstats[0]], columns=columns)
方法2:定义变量时去掉外层列表(更简洁)
直接把stats_list的返回值赋值给变量,不需要额外套一层[]:
import pandas as pd columns = ['ticker', 'avg range', 'std of range', '0.5 std range', 'median range', 'highest range', 'lowest range'] # 去掉外层[],直接接收stats_list返回的7元素列表 eu_5dstats = stats_list("EUR_USD","D",5) gu_5dstats = stats_list("GBP_USD","D",5) # 直接用两个列表构造两行数据 table = pd.DataFrame([eu_5dstats, gu_5dstats], columns=columns)
为什么之前的尝试失败?
- 用
pd.DataFrame([eu_5dstats, gu_5dstats], columns=[columns])时,传入的数据是[[[7元素]], [[7元素]]],三层嵌套导致pandas把每个内层列表当成单独一列,输出结构异常。 - 用
zip(eu_5dstats, gu_5dstats)时,得到的是包含2组配对数据的结构(只有2列),和你定义的7个列名不匹配,因此抛出ValueError。
内容的提问来源于stack exchange,提问作者spmf1694
相关产品推荐
相关产品推荐

