为什么会这样pandas.to\数字产生一个列表?

2024-09-30 01:19:31 发布

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

我正在尝试将csv数据导入到pandas数据框中。为此,我将执行以下操作:

df = pd.read_csv(StringIO(contents), skiprows=4, delim_whitespace=True,index_col=False,header=None)
index = pd.MultiIndex.from_arrays((columns,  units, descr))
df.columns = index
df.columns.names = ['Name','Unit','Description']
df = df.apply(pd.to_numeric)
data['isotherm'] = df

这将生成下表:

In: data['isotherm']
Out:
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

但是,如果我只想得到列Relative_Pressure的值,我会得到以下输出:

In: data['isotherm']['Relative_Pressure'].values
Out:
array([[0.042691],
       [0.078319],
       [0.129529],
       [0.183355],
       [0.233435],
       [0.280847]])

当然,我现在可以为我想使用的每一列展开

x = [item for sublist in data['isotherm']['Relative_Pressure'].values for item in sublist]

然而,这将导致大量额外的工作,也会降低可读性。如何确保整个数据帧的数据是平坦的?你知道吗


Tags: columnscsv数据nameindfdataindex
2条回答

索引到属于MultiIndex对象的一列的直接方法是使用tuple如下所示:

data[('isotherm', 'Relative_Pressure')]

它将返回一个Series对象,其.values属性将为您提供所需的1D数组。文档讨论了这个here

您应该小心使用像data['isotherm']['Relative_Pressure']这样的链式索引,因为您不知道您处理的是数据的副本还是数据的视图。请搜索熊猫的SettingWithCopyWarning以获取更多详细信息或阅读文档here。你知道吗

array([[...]])不是列表列表,而是2D numpy数组。(不过,我不知道为什么这里的值是作为单列2D数组而不是1D数组返回的。当我创建一个基本的DataFrame时,一个列的值作为一个1D数组返回。)

您可以使用numpy的内置函数连接和展平它们,例如

x = data['isotherm']['Relative_Pressure'].flatten()

编辑:这可能是由多重索引引起的。你知道吗

相关问题 更多 >

    热门问题