我正在尝试将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]
然而,这将导致大量额外的工作,也会降低可读性。如何确保整个数据帧的数据是平坦的?你知道吗
索引到属于
MultiIndex
对象的一列的直接方法是使用tuple
如下所示:它将返回一个
Series
对象,其.values
属性将为您提供所需的1D数组。文档讨论了这个here您应该小心使用像
data['isotherm']['Relative_Pressure']
这样的链式索引,因为您不知道您处理的是数据的副本还是数据的视图。请搜索熊猫的SettingWithCopyWarning
以获取更多详细信息或阅读文档here。你知道吗array([[...]])
不是列表列表,而是2D numpy数组。(不过,我不知道为什么这里的值是作为单列2D数组而不是1D数组返回的。当我创建一个基本的DataFrame时,一个列的值作为一个1D数组返回。)您可以使用numpy的内置函数连接和展平它们,例如
编辑:这可能是由多重索引引起的。你知道吗
相关问题 更多 >
编程相关推荐