[英]Pandas slicing data with MultiIndex
我有一些要写入某些csv文件的功能。 如果可能的话,我想将熊猫用于这种方法。
我正在按照此处的说明进行操作,并创建了一些虚拟数据以将其检出。 基本上,有些活动具有属于它们的随机数量的功能。
import io
data = io.StringIO('''Activity,id,value,value,value,value,value,value,value,value,value
Run,1,1,2,2,5,6,4,3,2,1
Run,1,2,4,4,10,12,8,6,4,2
Stand,2,1.5,3.,3.,7.5,9.,6.,4.5,3.,1.5
Sit,3,0.5,1.,1.,2.5,3.,2.,1.5,1.,0.5
Sit,3,0.6,1.2,1.2,3.,3.6,2.4,1.8,1.2,0.6
Run, 2, 0.8, 1.6, 1.6, 4. , 4.8, 3.2, 2.4, 1.6, 0.8
''')
df_unindexed = pd.read_csv(data)
df = df_unindexed.set_index(['Activity', 'id'])
当我跑步时:
df.xs('Run')
我懂了
value value.1 value.2 value.3 value.4 value.5 value.6 value.7 \
id
1 1.0 2.0 2.0 5.0 6.0 4.0 3.0 2.0
1 2.0 4.0 4.0 10.0 12.0 8.0 6.0 4.0
2 0.8 1.6 1.6 4.0 4.8 3.2 2.4 1.6
value.8
id
1 1.0
1 2.0
2 0.8
这几乎是我想要的,那就是所有run
活动。 我想删除第一行和第一列,即标题和id
列。 我该如何实现?
另外一个第二个问题是,当我只想要一项活动时,如何获得它。
使用时
idx = pd.IndexSlice
df.loc[idx['Run', 1], :]
给
value value.1 value.2 value.3 value.4 value.5 value.6 \
Activity id
Run 1 1.0 2.0 2.0 5.0 6.0 4.0 3.0
1 2.0 4.0 4.0 10.0 12.0 8.0 6.0
value.7 value.8
Activity id
Run 1 2.0 1.0
1 4.0 2.0
但切片无法像我期望的那样工作。 例如尝试
df.loc[idx['Run', 1], 2:11]
而是产生一个错误:
TypeError:无法使用“ int”>的这些索引器[2]进行切片索引
那么,如何在这个地方获得功能?
PS:如果不清楚,我对Pandas
并不Pandas
所以要保持温柔。 此外,列id
可以编辑,以使每个活动或整个数据集都是唯一的,如果这样会使事情变得更容易等。
您可以使用一些技巧-通过位置获取列名称,因为尚不支持 iloc
for MultiIndex
:
print (df.columns[2:11])
Index(['value.2', 'value.3', 'value.4', 'value.5', 'value.6', 'value.7',
'value.8'],
dtype='object')
idx = pd.IndexSlice
print (df.loc[idx['Run', 1], df.columns[2:11]])
value.2 value.3 value.4 value.5 value.6 value.7 value.8
Activity id
Run 1 2.0 5.0 6.0 4.0 3.0 2.0 1.0
1 4.0 10.0 12.0 8.0 6.0 4.0 2.0
如果要将文件保存到没有索引和列的csv中:
df.xs('Run').to_csv(file, index=False, header=None)
当我遇到这类问题时,我通常会查看https://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-integer 。
没有任何测试,我想您可以删除行和列,例如
df = df.drop(['rowindex'], axis=0)
df = df.drop(['colname'], axis=1)
通过在CSV读取时识别索引列来避免此问题:
pd.read_csv(header=0, # to read in the header row as a header row, and
... index_col=['id'] or index_col=0 to pick the index column.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.