【问题标题】:How to create a dataframe based on list containing column names?如何基于包含列名的列表创建数据框?
【发布时间】:2023-03-24 04:25:01
【问题描述】:

如何根据包含列名的列表创建数据框?

情况

我有一个存储在名为 data 的变量中的列名列表:

  • values_c1_114
  • values_c1_84
  • values_c1_37
  • values_c1_126 ...

列表数据共有552个元素。

现在我想根据这个列名列表创建一个数据框。

我认为我可以通过以下方式访问列名后面的值:

for element in data:
    print(element)

但是这种编码只返回列名,而不是命名列后面的值。

Result using for element approach

可以访问列名后面的值。

Accessing single column values

解决方案: 以下方法解决了我的问题。 columns 包含应添加到数据框中的列名列表。

data = {k: eval(k) for k in columns}
df = pd.DataFrame(data)
print(df)

【问题讨论】:

  • 欢迎来到 SO。请添加您的列表样本。我的意思是您要转换的那个。
  • 您说data 是列名列表。它们背后的价值在哪里?
  • 感谢您的提问。当我一一访问它们时,这些值都是可用的。我使用全局变量来创建单值列表。此外,我创建了一个列表,其中仅包含动态全局创建的值列表的名称。
  • 我刚刚修改了我的问题,以便为您的问题 Shireen 提供更多详细信息!

标签: python pandas list dataframe


【解决方案1】:

看看这是不是你需要的。如果我理解 OP 的问题正确,OP 的关键问题是如何将变量名作为字符串获取,然后将字符串集用作 dataframe 列。

def namestr(obj, namespace):
    return [name for name in namespace if namespace[name] is obj][0]
    
import pandas as pd
    
# to simulate the data you have
col1 = [1, 2, 3]
col2 = [4, 5, 6]
data = [col1, col2]
    
df = pd.DataFrame(data).T
df.columns = [namestr(i, globals()) for i in data]
print(df)

输出:

    col1  col2
0     1     4
1     2     5
2     3     6

或者反过来,你将列名作为列表中的字符串,然后你可以这样做:

columns = ['col1','col2']
col1 = [1, 2, 3]
col2 = [3, 4, 5]

data = { k: eval(k) for k in columns }

df = pd.DataFrame(data)
print(df)

输出:

    col1  col2
0     1     3
1     2     4
2     3     5

【讨论】:

  • 非常感谢!以下方法完美: data = {k: eval(k) for k in columns} df = pd.DataFrame(data) print(df)
【解决方案2】:
# importing library
import pandas as pd

# list of column names
data = ['values_c1_114','values_c1_84','values_c1_37','values_c1_126']

# data inside each columns
values_c1_114_list = [i for i in range(1,11)]
values_c1_84_list = [i for i in range(11,21)]
values_c1_37_list = [i for i in range(21,31)]
values_c1_126_list = [i for i in range(31,41)]


# creating dict 
dict = {
    'values_c1_114':values_c1_114_list,
    'values_c1_84':values_c1_84_list,
    'values_c1_37':values_c1_37_list,
    'values_c1_126':values_c1_126_list
}

# creating dataframe
df = pd.DataFrame(dict)

#printing dataframe
print(df)

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 2016-11-02
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2018-06-23
    相关资源
    最近更新 更多