我设置了一个熊猫数据框,除了我的数据外,还使用MultiIndex像这样存储了各自的单位:
Name Relative_Pressure Volume_STP
Unit - ccm/g
Description p/p0
0 0.042691 29.3601
1 0.078319 30.3071
2 0.129529 31.1643
3 0.183355 31.8513
4 0.233435 32.3972
5 0.280847 32.8724
现在我可以例如仅提取Volume_STP
数据,
Unit ccm/g
Description
0 29.3601
1 30.3071
2 31.1643
3 31.8513
4 32.3972
5 32.8724
使用.values
,我可以获得一个数据的numpy数组。但是,如何获取存储的单位?我无法弄清楚接收存储的ccm/g
字符串需要做什么。
编辑:添加了如何生成数据框的示例
假设我有一个看起来像这样的字符串:
Relative Volume @ STP
Pressure
cc/g
4.26910e-02 29.3601
7.83190e-02 30.3071
1.29529e-01 31.1643
1.83355e-01 31.8513
2.33435e-01 32.3972
2.80847e-01 32.8724
3.34769e-01 33.4049
3.79123e-01 33.8401
然后我使用此功能:
def read_result(contents, columns, units, descr):
df = pd.read_csv(StringIO(contents), skiprows=4, delim_whitespace=True,index_col=False,header=None)
df.drop(df.index[-1], inplace=True)
index = pd.MultiIndex.from_arrays((columns, units, descr))
df.columns = index
df.columns.names = ['Name','Unit','Description']
df = df.apply(pd.to_numeric)
return df
像这样
def isotherm(contents):
columns = ['Relative_Pressure','Volume_STP']
units = ['-','ccm/g']
descr = ['p/p0','']
df = read_result(contents, columns, units, descr)
return df
在我的问题开始时生成DataFrame。
答案 0 :(得分:1)
由于df
具有作为列的MultiIndex,因此df.Volume_STP
仍然是熊猫DataFrame。因此,您仍然可以访问其columns
属性,并且相关项将位于索引0,因为数据框仅包含1系列。
因此,您可以通过以下方式提取名称:
print(df.Volume_STP.columns[0])
应提供:('ccm/g', '')
最后,您使用.colums[0][0]
提取单位,并使用.columns[0][1]
提取说明
答案 1 :(得分:1)
您可以执行以下操作:
df.xs('Volume_STP', axis=1).columns.remove_unused_levels().get_level_values(0).tolist()[0]
输出:
'ccm/g'
使用xs
从“ Volume_STP”中切片数据帧,然后选择列,删除列标题中未使用的部分,然后获取该切片的最顶层(即单位)的值。转换为列表,然后选择第一个值。
答案 2 :(得分:0)
访问多索引/列上的值的一种通用方法是使用数据帧的index.get_level_values
或columns.get_level_values
函数。
在您的示例中,尝试df.columns.get_level_values(1)
访问多级列“单位”的第二级。如果您已经选择了一个列,例如说“ Volume_STP”,那么您已经删除了顶层,在这种情况下,您的单位将处于第0级。