Python的Pandas:从以字符串形式输入的列名中获取值(如list/array)

2024-09-27 21:31:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近经常使用熊猫,遇到了一个小小的僵局。。在

我有一个pandas数据结构,它是从.fits文件中读入的

d = fits.getdata('filename.fits')
df = pd.DataFrame(np.array(d))
df.columns = map(str.lower, df.columns)

包含列名:“n_ser_f2mf1_f850lp”、“n_ser_f3mf2_f850lp”、“mtot_f2mf1_f850lp”、“mtot_f3mf2_f850lp”、“other galaxy characteristics_f3mf2_f850lp”

(如果你感兴趣的话,它包含了适合星系团的星系的Sersic指数的差异,这些星系团是由哈勃太空望远镜(使用过滤器F850LP)在多个视场中拍摄到的-->;f3mf2意味着星系在第3和第2场,所以我们做valueinfield3-valueinfield2)

数据结构/值示例:

^{pr2}$

我想将列中包含的数据用作numpy数组,通常我会这样做:

n_ser_residuals = df.n_ser_f2mf1_f850lp.values

这将产生一个数组:

length(array) = numberofgalaxies
array = [        nan,         nan,         nan, ...,  0.46969998,
    1.48409998,  0.08240002]

但是,我将列名作为字符串处理(在不同的值之间循环,例如:

 for p in ['f3mf2, 'f2mf1', otheroverlappingfields]:
     col0name = 'n_ser_{}_f850lp'.format(p)
     col1name = 'mtot_{}_f850lp'.format(p)
     etc

所以要访问我使用的值:

n_ser_residuals = (df[col0name].values)

结果是一个长度为1的数组,如下所示:

[array([        nan,         nan,         nan, ...,  0.46969998,
    1.48409998,  0.08240002], dtype=float32)]

为什么这个方法会产生不同的输出?如何将此输出转换为列表?在


Tags: columns数据结构df数组nanarrayser星系
1条回答
网友
1楼 · 发布于 2024-09-27 21:31:06

对我来说一切都很好(熊猫0.18.1):

In [28]: col0name = 'n_ser_{}_f850lp'.format('f2mf1')

In [29]: col0name
Out[29]: 'n_ser_f2mf1_f850lp'

In [30]: df[col0name]
Out[30]:
285   -4.5086
286   -1.4044
287       NaN
288    2.1634
289    0.3278
Name: n_ser_f2mf1_f850lp, dtype: float64

In [31]: df[col0name].values
Out[31]: array([-4.5086, -1.4044,     nan,  2.1634,  0.3278])

In [32]: df[col0name].values[1]
Out[32]: -1.4044000000000001

In [33]: df[col0name].values[2]
Out[33]: nan

In [34]: df[col0name].values[1:5]
Out[34]: array([-1.4044,     nan,  2.1634,  0.3278])

相关问题 更多 >

    热门问题