【问题标题】:create a pandas data frame from several lists从几个列表创建一个熊猫数据框
【发布时间】:2015-03-28 03:05:33
【问题描述】:

我的函数输出一个列表,例如当我键入时:

My_function('TV', 'TV_Screen')

它输出以下内容:

['TV', 1, 'TV_Screen', 0.04, 'True']

现在,我的电视由几个部分组成,例如扬声器、变压器等,我可以继续运行每个部分的函数,例如将“TV_Screen”更改为“TV_Speaker”或“TV_transformer”等.

另一种方法是创建一个包含所有部分的列表,例如:

TV_parts = ['TV_Screen', 'TV_Speaker', 'TV_transformer']

我想要得到的是一个带有 5 列的 pandas 数据框(因为我的函数输出 5 个变量,请参见上面的“它输出以下内容:”部分),在这种情况下为 3 行(每个用于 'TV_Screen '、'TV_Speaker' 和 'TV_transformer')。基本上,我希望以下内容出现在数据框中:

['TV', 1, 'TV_Screen', 0.04, 'True']
['TV', 9, 'TV_Speaker', 0.56, 'True']
['TV', 3, 'TV_transformer', 0.80, 'False']

我知道我需要一个 for 循环,但我不确定如何创建这个数据框。能否请你帮忙? (我可以将函数的输出更改为 pd.Series 或其他效果更好的东西)。

谢谢!

【问题讨论】:

  • 您应该能够将每个列表设为pandas.Series,然后将它们连接在一起。出于某种原因,在pandas.concat 中使用axis=0 并没有达到我的预期。但是如果你有一个系列列表a;那么pandas.concat(a, axis=1).tranpose() 应该做你想做的事。

标签: python for-loop pandas dataframe data-manipulation


【解决方案1】:

你可以这样做:

def My_function(part):
    # prepare result
    result = ['TV', 1, part, 0.04, 'True'] # for testing 
    return result

TV_parts = ['TV_Screen', 'TV_Speaker', 'TV_transformer']
df = pd.DataFrame([My_function(part) for part in TV_parts])

>>> df

    0  1               2     3     4
0  TV  1       TV_Screen  0.04  True
1  TV  1      TV_Speaker  0.04  True
2  TV  1  TV_transformer  0.04  True

【讨论】:

  • 太棒了!感谢您对 elyase 的帮助!
【解决方案2】:

如果您有很多数组,可能值得先将它们转换为 numpy 矩阵,然后再将它们转换为数据帧。

import pandas as pd
import numpy as np

a = ['TV', 1, 'TV_Screen', 0.04, 'True']
b = ['TV', 9, 'TV_Speaker', 0.56, 'True']
c = ['TV', 3, 'TV_transformer', 0.80, 'False']

matrix = np.matrix([a,b,c])

df = pd.DataFrame(data=matrix)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 2021-05-04
    • 2019-04-18
    • 2019-08-24
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2023-01-14
    相关资源
    最近更新 更多