• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共95篇

    python3.X - 数据分析 - Pandas

关闭

返回栏目

关闭

返回python3.X - 数据分析 - Pandas栏目

59 - 选择数据 - df.loc[:,:] - 行名,列名 - 时间范围

作者:

贺及楼

成为作者

更新日期:2024-10-18 14:35:45

loc()loc[]

loc简介

Pandas 的 loc 访问器用于基于标签的索引,它可以用于选择 DataFrame 或 Series 中的数据子集。loc 允许你指定行标签和列标签的组合来精确地选择你需要的数据。

以下是 loc 的一些关键特点:

基于标签的索引:
使用行标签和列标签来选择数据。

选择单列:
可以仅通过行标签选择单列的数据。

选择多列:
可以选择多列,返回一个 DataFrame。

选择单行:
可以通过指定单个行标签来选择单行。

选择多行:
可以选择多行,返回一个 DataFrame。

使用切片:
可以使用标签切片来选择数据范围。

布尔索引:
可以与布尔数组一起使用来进行条件选择。

就地修改:
可以就地修改数据,不返回新的 DataFrame。

保持索引:
默认情况下,使用 loc 选择数据会保持原始索引。

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']

本篇例子

  1. import numpy as np
  2. import pandas as pd
  3. df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
  4. 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

loc 用行名 + 列名

  1. df.loc[控制行,控制列] # 原理
  2. df.loc["行A名","列B名"] # 单行单列,这里1个数
  3. df.loc[1,"B"]
  1. import numpy as np
  2. import pandas as pd
  3. df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
  4. print(df)
  5. data = df.loc[1,"B"]
  6. print(data)

loc获得值

loc 行名 + :

  1. df.loc[控制行,控制列] # 原理
  2. df.loc["行A名",:] # 单行n列,就一行咯
  3. df.loc[2,:]
  1. import numpy as np
  2. import pandas as pd
  3. df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
  4. print(df)
  5. data = df.loc[2,:]
  6. print(data)
A 2
B 1
C 6

Name: 2, dtype: int64

loc整行

loc : + 列名

  1. df.loc[:, "列A名"] # n行单列,就一列咯
  2. pd.DataFrame(df.loc[:, "列A名"]) # 这里是Series类型,要转回DataFrame类型
  3. df.loc[:, "B"]
  1. import numpy as np
  2. import pandas as pd
  3. df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
  4. print(df)
  5. data = df.loc[:, "B"]
  6. print(data)
0 3
1 2
2 1

Name: B, dtype: int64

loc整列

loc 不连续获得值

  1. df.loc[['行A名','行D名'],['列A名','列D名']] # 2行2列,4个数(不连续的)
  2. df.loc[[0,2],['A','C']]
  1. import numpy as np
  2. import pandas as pd
  3. df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
  4. print(df)
  5. data = df.loc[[0,2],['A','C']]
  6. print(data)
A C
0 1 4
2 2 6

loc不连续获得值

loc连续获得值

  1. df.loc['行A名':'行D名','列A名':'列D名'] # 2行2列,4个数(连续的)
  2. df.loc[0:2,'A':'C']
  1. import numpy as np
  2. import pandas as pd
  3. df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
  4. print(df)
  5. data = df.loc[0:2,'A':'C']
  6. print(data)
A B C
0 1 3 4
1 3 2 5
2 2 1 6

loc连续获得值

loc修改值

  1. df.loc[i1, i2, i3, i4]["列A名"] = "新值" # 多index
  2. df.loc[i1, "列A名"] = "新值"
  3. df.loc[2, "B"] = 99
  1. import numpy as np
  2. import pandas as pd
  3. df = pd.DataFrame(data=[{"A":"1", "B":"3", "C":"4"}, {"A":"3", "B":"2", "C":"5"}, {"A":"2", "B":"1", "C":"6"}])
  4. print(df)
  5. df.loc[2, "B"] = 99
  6. print(df)

loc修改值

  1. data.loc[(data['A'] == 0) & (data['B'] == 1) & (data['C'].isnull())]

选择数据后改

  1. df.loc[df['判断列'] == 0, '目标列'] = "目标列改成xx"

筛选时间

  1. import datetime
  2. df["start_time"] = pd.to_datetime(df["start_time"], format='%Y-%m-%d %H:%M:%S')
  3. df["end_time"] = pd.to_datetime(df["end_time"], format='%Y-%m-%d %H:%M:%S')
  4. now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 字符串
  5. df = df.loc[(df['start_time'] <= now) & (df['end_time'] >= now)]