Pandas 的 loc 访问器用于基于标签的索引,它可以用于选择 DataFrame 或 Series 中的数据子集。loc 允许你指定行标签和列标签的组合来精确地选择你需要的数据。
以下是 loc 的一些关键特点:
基于标签的索引:
使用行标签和列标签来选择数据。
选择单列:
可以仅通过行标签选择单列的数据。
选择多列:
可以选择多列,返回一个 DataFrame。
选择单行:
可以通过指定单个行标签来选择单行。
选择多行:
可以选择多行,返回一个 DataFrame。
使用切片:
可以使用标签切片来选择数据范围。
布尔索引:
可以与布尔数组一起使用来进行条件选择。
就地修改:
可以就地修改数据,不返回新的 DataFrame。
保持索引:
默认情况下,使用 loc 选择数据会保持原始索引。
简介 | 功能 | 公式 | 释义 | 例子 |
---|---|---|---|---|
单行单列 | loc 用行名 + 列名 | df.loc[控制行,控制列] |
df.loc["行A名","列B名"] |
data = df.loc[1,"B"] |
单行n列 | loc 行名 + : | df.loc[控制行,控制列] |
df.loc["行A名",:] |
data = df.loc[2,:] |
n行单列 | loc : + 列名 | df.loc[控制行,控制列] |
df.loc[:, "列A名"] |
data = df.loc[:, "B"] |
/ | loc 不连续获得值 | / | df.loc[['行A名','行D名'],['列A名','列D名']] |
df.loc[[0,2],['A','C']] |
/ | loc连续获得值 | / | df.loc['行A名':'行D名','列A名':'列D名'] |
df.loc[0:2,'A':'C'] |
import numpy as np
import pandas as pd
df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
df = pd.DataFrame(data=[{"A":1, "B":3, "C":4}, {"A":3, "B":2, "C":5}, {"A":2, "B":1, "C":6}])
A | B | C | |
---|---|---|---|
0 | 1 | 3 | 4 |
1 | 3 | 2 | 5 |
2 | 2 | 1 | 6 |
df.loc[控制行,控制列] # 原理
df.loc["行A名","列B名"] # 单行单列,这里1个数
df.loc[1,"B"]
import numpy as np
import pandas as pd
df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
print(df)
data = df.loc[1,"B"]
print(data)
df.loc[控制行,控制列] # 原理
df.loc["行A名",:] # 单行n列,就一行咯
df.loc[2,:]
import numpy as np
import pandas as pd
df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
print(df)
data = df.loc[2,:]
print(data)
A | 2 |
B | 1 |
C | 6 |
Name: 2, dtype: int64
df.loc[:, "列A名"] # n行单列,就一列咯
pd.DataFrame(df.loc[:, "列A名"]) # 这里是Series类型,要转回DataFrame类型
df.loc[:, "B"]
import numpy as np
import pandas as pd
df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
print(df)
data = df.loc[:, "B"]
print(data)
0 | 3 |
1 | 2 |
2 | 1 |
Name: B, dtype: int64
df.loc[['行A名','行D名'],['列A名','列D名']] # 2行2列,4个数(不连续的)
df.loc[[0,2],['A','C']]
import numpy as np
import pandas as pd
df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
print(df)
data = df.loc[[0,2],['A','C']]
print(data)
A | C | |
---|---|---|
0 | 1 | 4 |
2 | 2 | 6 |
df.loc['行A名':'行D名','列A名':'列D名'] # 2行2列,4个数(连续的)
df.loc[0:2,'A':'C']
import numpy as np
import pandas as pd
df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
print(df)
data = df.loc[0:2,'A':'C']
print(data)
A | B | C | |
---|---|---|---|
0 | 1 | 3 | 4 |
1 | 3 | 2 | 5 |
2 | 2 | 1 | 6 |
df.loc[i1, i2, i3, i4]["列A名"] = "新值" # 多index
df.loc[i1, "列A名"] = "新值"
df.loc[2, "B"] = 99
import numpy as np
import pandas as pd
df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
print(df)
df.loc[2, "B"] = 99
print(df)
data.loc[(data['A'] == 0) & (data['B'] == 1) & (data['C'].isnull())]
df.loc[df['判断列'] == 0, '目标列'] = "目标列改成xx"
import datetime
df["start_time"] = pd.to_datetime(df["start_time"], format='%Y-%m-%d %H:%M:%S')
df["end_time"] = pd.to_datetime(df["end_time"], format='%Y-%m-%d %H:%M:%S')
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 字符串
df = df.loc[(df['start_time'] <= now) & (df['end_time'] >= now)]