pandas dataframe loc in list
参考:pandas dataframe loc in list
在Python的数据分析库pandas中,DataFrame是一个二维的、大小可变的、潜在的异质的表格数据结构。它是一种特殊的数据结构,提供了大量的方法和属性,使得数据处理变得更加方便。其中,loc
是DataFrame的一个重要属性,它提供了基于标签的索引功能,可以通过行标签和列标签来定位数据。
本文将详细介绍如何在pandas DataFrame中使用loc
属性来处理列表数据。
1. 基本使用
loc
属性的基本使用方法是df.loc[row_label, column_label]
,其中df
是一个DataFrame对象,row_label
和column_label
分别是行标签和列标签。
例如,我们创建一个DataFrame对象:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 21],
'city': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
df.index = ['a', 'b', 'c', 'd']
print(df)
Output:
然后,我们可以使用loc
属性来获取某一行或某一列的数据:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 21],
'city': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
df.index = ['a', 'b', 'c', 'd']
print(df.loc['a']) # 获取行标签为'a'的行数据
print(df.loc[:, 'name']) # 获取列标签为'name'的列数据
Output:
2. 使用列表作为行标签或列标签
loc
属性还支持使用列表作为行标签或列标签,这样可以一次性获取多行或多列的数据。
例如,我们可以获取行标签为’a’和’c’的行数据:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 21],
'city': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
df.index = ['a', 'b', 'c', 'd']
print(df.loc[['a', 'c']])
Output:
也可以获取列标签为’name’和’age’的列数据:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 21],
'city': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
df.index = ['a', 'b', 'c', 'd']
print(df.loc[:, ['name', 'age']])
Output:
3. 使用列表作为行标签和列标签
当然,我们也可以同时使用列表作为行标签和列标签,这样可以获取DataFrame的一个子集。
例如,我们可以获取行标签为’a’和’c’,列标签为’name’和’age’的数据:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 21],
'city': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
df.index = ['a', 'b', 'c', 'd']
print(df.loc[['a', 'c'], ['name', 'age']])
Output:
4. 使用布尔列表作为行标签或列标签
loc
属性还支持使用布尔列表作为行标签或列标签,这样可以根据条件来获取数据。
例如,我们可以获取年龄大于20的人的数据:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 21],
'city': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
df.index = ['a', 'b', 'c', 'd']
print(df.loc[df['age'] > 20])
Output:
也可以获取名字包含’pandasdataframe.com’的人的数据:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 21],
'city': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
df.index = ['a', 'b', 'c', 'd']
df['name'] = df['name'] + '@pandasdataframe.com'
print(df.loc[df['name'].str.contains('pandasdataframe.com')])
Output:
5. 使用列表作为行标签或列标签的高级用法
loc
属性还有一些高级的用法,例如,我们可以使用列表作为行标签或列标签,然后对获取的数据进行赋值操作。
例如,我们可以将年龄大于20的人的城市改为’pandasdataframe.com’:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 21],
'city': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
df.index = ['a', 'b', 'c', 'd']
df.loc[df['age'] > 20, 'city'] = 'pandasdataframe.com'
print(df)
Output:
也可以将名字包含’pandasdataframe.com’的人的年龄改为0:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 21],
'city': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
df.index = ['a', 'b', 'c', 'd']
df.loc[df['name'].str.contains('pandasdataframe.com'), 'age'] = 0
print(df)
Output: