Pandas中的分层数据指的是可以在一维(Series)或二维(DataFrame)数据结构中添加多个级别的索引,形成“多维数据”的结构,也被称为“层次化索引”。Pandas中的层次化索引可以让我们更方便地处理高维数据,并支持快速的数据聚合、切片、索引等操作。
一般来说,层次化的索引可以通过以下几种方式创建:
- 手动创建:使用pandas的MultiIndex类来手动定义分层索引。例如,我们可以通过pd.MultiIndex.from_arrays()方法来手动创建分层索引,如下所示:
import pandas as pd
arrays = [['a', 'a', 'b', 'b'], [1, 2, 1, 2]]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
s = pd.Series(range(1, 5), index=index)
print(s)
执行结果为:
first second
a 1 1
2 2
b 1 3
2 4
dtype: int64
- 读取时创建:读取csv、excel等文件时,可以通过参数指定某些列或多个列作为分层索引,如下所示:
import pandas as pd
df = pd.read_csv('data.csv', index_col=['col1', 'col2'])
print(df.head())
- 在数据处理时创建:可以通过Pandas提供的GroupBy方法,对一维或二维数据进行分组操作,生成多层索引的结果。例如,我们可以使用groupby()方法对数据进行分组,并生成层次化索引:
import pandas as pd
df = pd.DataFrame({
'key1': ['a', 'a', 'b', 'b', 'a'],
'key2': ['one', 'two', 'one', 'two', 'one'],
'data1': [1, 2, 3, 4, 5],
'data2': [10, 20, 30, 40, 50]
})
grouped = df.groupby(['key1', 'key2'])
result = grouped['data1'].sum()
print(result)
执行结果为:
key1 key2
a one 6
two 2
b one 3
two 4
Name: data1, dtype: int64
在层次化索引的数据中,我们可以使用各种方法和函数,对数据进行选择、切片、筛选、计算等操作,例如:
- 使用loc和iloc方法选取数据:
import pandas as pd
arrays = [['a', 'a', 'b', 'b'], [1, 2, 1, 2]]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
data = [11, 12, 13, 14]
df = pd.DataFrame(data, index=index, columns=['data'])
print(df)
print(df.loc[('a', 1)])
print(df.iloc[0])
执行结果为:
data
first second
a 1 11
2 12
b 1 13
2 14
data 11
Name: (a, 1), dtype: int64
data 11
Name: (a, 1), dtype: int64
- 分组计算平均值:
import pandas as pd
df = pd.DataFrame({
'key1': ['a', 'a', 'b', 'b', 'a'],
'key2': ['one', 'two', 'one', 'two', 'one'],
'data1': [1, 2, 3, 4, 5],
'data2': [10, 20, 30, 40, 50]
})
grouped = df.groupby(['key1', 'key2'])
result = grouped.mean()
print(result)
执行结果为:
data1 data2
key1 key2
a one 3.0 30.0
two 2.0 20.0
b one 3.0 30.0
two 4.0 40.0
总之,Pandas的分层数据功能非常强大,并且支持多种方法和函数,可以很好的处理高维数据,是数据分析中不可缺少的工具之一。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pandas中的分层数据 - Python技术站