【问题标题】:How to assign Dataframe column header names to column variable with iteration如何通过迭代将 Dataframe 列标题名称分配给列变量
【发布时间】:2017-12-03 06:59:42
【问题描述】:

我正在尝试遍历数据框标题名称并将每个名称分配给相应的列值,以便打印每个标题的名称将打印分配给该标题名称的列数据。当前代码:

import pandas as pd

filepath = "...data"

df = pd.DataFrame.from_csv(filepath, header=0, index_col=None)

for i in list(df):
    print i
    i = str(i)
    i = df[i]

print(cal_z)

结果:

C:\...TFS_plot.py"

wavelength (nm)
Mix1_p
Ccal_p
Mix1_zero
Cal_zero
Mix_deriv
Cal_deriv
Unnamed: 7
Mix1_raw
Cal_rawzero
Mix1_rawderiv

Traceback (most recent call last):
  File "C:\....TFS_plot.py", line 14, in <module>
    print(cal_z)
NameError: name 'Mix1_p' is not defined

我将迭代器分配给变量 df[i] 的方式有问题吗?

示例数据:

cat dog
3   1
2   2
1   4

print dog

结果:

(1,2,4)

【问题讨论】:

  • 您能具体说明您的问题吗?你到底想做什么?目前i = df[i] 将该列分配给i,但之后您没有使用i,因此没有任何反应。
  • 即使我将 'i = df[i]' 更改为 'a = df[i]' 它仍然不起作用。
  • 你的问题还不清楚,你想要的输出是什么?从您的示例中,您似乎想要创建新变量,这些变量的名称是列名,然后您希望将相应的列数据包含为列表。对吗?
  • 列表或系列.. 并不重要。我通常会做'name = df['header name']'。

标签: python pandas dataframe iteration


【解决方案1】:

如果您的问题是如何创建与 DataFrame 列同名的变量,并且您希望这些变量包含它们各自列的值,那么这应该会有所帮助

import pandas as pd
df = pd.DataFrame ({'cat':[3,2,1],'dog':[1,2,4]})

for i in list(df):
    exec(i + " = df[i].values")
print(dog)
print(cat)

您的变量会将其列值作为列表。

print(dog)
# returns [1 2 4]
print(cat)
# returns [3 2 1]

您所做的只是获取列名称 ( i ) 并使用 exec 将相应的列传递给它 (df[i].values)。 编码愉快。

【讨论】:

  • 感谢您的回答!那么exec函数是否只取字符串值呢?
  • 其实很抱歉,我给出了错误的链接,你可以看到here,exec 可以接受字符串或代码对象,在这种情况下我们使用字符串参数作为你的代码行想要执行。 exec( i + " = df[i].values" ) 完全等同于 dog = df['dog'].values 或 cat = df['cat'].values
【解决方案2】:

您好,有办法做到这一点。但就我现在而言,最好只使用字典来存储变量。

使用list(df)df.columns.tolist() 获取您的df 标头列表 然后在迭代此列表时使用exec() 函数并存储相应的值

df = pd.DataFrame({"dog":[1,2,3,],"cat":[2,4,6]})
print(df)

输出:

   cat  dog
0    2    1
1    4    2
2    6    3

list()-函数

print(list(df))
['cat', 'dog']

exec()-函数

for name in list(df):
    exec("{}={}".format(name,list(df[name])))

之后您可以通过列名调用您的列表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    相关资源
    最近更新 更多