python:pandas(2)

  • 查询数据

Pandas 中提供了多种查询函数,方便我们的数据查询操作,我们需要查询的数据条件不同,所采用的操作也有所不同,总的来说,我们的查询条件可以为按单个值查询、按值列表查询、按值区间查询、按条件表达式查询和按函数查询五种查询的方式,接下来我们将以 loc () 查询函数为例,详细讲解每种查询的具体操作。

loc( ) 通过标签或布尔数字查询数据集 (推荐使用的查询方法)
iloc( ) 通过索引位来查询数据集
query( ) 通过布尔表达式查询数据列

loc () 的查询条件,可以使用 label 值,也可以使用布尔值,他丰富的传值方式,以及简洁的使用方式,成为 Pandas 数据查询较为常用的方法。
这里我们通过解析 Excel 数据文件,获得了数据,具体数据解析内容如下:

import pandas as pd
data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0

1. 按单个值查询
loc () 多个查询值的传递,第一个参数选择 index (行索引值,最左侧一列),第二个参数选择 column(列索引值,最上面一行),如果参数传错,查询时汇报索引值查找错误。

import pandas as pd
data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data.loc[1])
print(data.loc[1,'价格'])
编程语言    python
推出时间      1991
创始人        222
价格          67
Name: 1, dtype: object

67.0

2. 按列表查询
在 loc () 函数中,我们通过传入要查询的列表项,可以查询多个数据内容,返回的数据结果是 Series 数据结构或者 DataFrame 数据结构。

import pandas as pd
data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data.loc[[1,2,5],['编程语言','价格']])
     编程语言    价格
1  python  67.0
2       c  33.9
5     c++  75.0

3. 按区间查询
按区间查询主要用到了英文状态下的冒号 “:” ,冒号左侧是区间的开始位置,右侧是结束位置。

print(data.loc[0:5, ['编程语言', '价格']])
print(data.loc[0:5, '推出时间':'价格'])
     编程语言    价格
0    Java  45.6
1  python  67.0
2       c  33.9
3      js  59.5
4     php  69.9
5     c++  75.0
#这里的行索引我们传入的是区间 0:5,从结果中可以看到数据内容正是这 6 行的数据,其中是包含区间两端的值的。
   推出时间  创始人    价格
0  1995  111  45.6
1  1991  222  67.0
2  1927  333  33.9
3  1995  444  59.5
4  2012  555  69.9
5  1983  666  75.0

4. 按条件查询
按条件查询是查询数据符合一定条件的数据集,包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)等条件。

print(data.loc[data['价格']<60])
   编程语言  推出时间  创始人    价格
0  Java  1995  111  45.6
2     c  1927  333  33.9
3    js  1995  444  59.5
print(data.loc[(data['价格'] <= 69.9) & (data['推出时间'] == 1927)])
  编程语言  推出时间  创始人    价格
2    c  1927  333  33.9

5. 按函数查询
函数查询是在查询的参数中传入函数,查询使该函数返回为 True 的数据集。

print(data.loc[data['推出时间'].isin([1927,1995,1983])])
   编程语言  推出时间  创始人    价格
0  Java  1995  111  45.6
2     c  1927  333  33.9
3    js  1995  444  59.5
5   c++  1983  666  75.0
  • Pandas 新增数据

新增数据列:

1.直接新增数据列

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
data['new_colume'] = ['a', 'b', 'c', 'd', 'e', 'f']
print(data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
     编程语言  推出时间  创始人    价格 new_colume
0    Java  1995  111  45.6          a
1  python  1991  222  67.0          b
2       c  1927  333  33.9          c
3      js  1995  444  59.5          d
4     php  2012  555  69.9          e
5     c++  1983  666  75.0          f

2.insert () 方法新增数据列

insert (loc, column, value, allow_duplicates=False)
loc 指定插入列的序号,从 0 开始
column 列索引名
value 插入的列数据
duplicates 是否允许插入已有的数据,如果为 False 插入重复数据会报错

data.insert(0, 'new', ['a', 'b', 'c', 'd', 'e', 'f'], allow_duplicates=False)
print(data)
  new    编程语言  推出时间  创始人    价格
0   a    Java  1995  111  45.6
1   b  python  1991  222  67.0
2   c       c  1927  333  33.9
3   d      js  1995  444  59.5
4   e     php  2012  555  69.9
5   f     c++  1983  666  75.0
data.insert(1, 'new', ['a', 'b', 'c', 'd', 'e', 'f'], allow_duplicates=False)
print(data)
     编程语言 new  推出时间  创始人    价格
0    Java   a  1995  111  45.6
1  python   b  1991  222  67.0
2       c   c  1927  333  33.9
3      js   d  1995  444  59.5
4     php   e  2012  555  69.9
5     c++   f  1983  666  75.0

新增数据行:

1.loc () 方法新增数据行

data.loc[6] = ['ss', 'dd', 23.1, 'ff']
print(data)
     编程语言  推出时间    创始人    价格
0    Java  1995  111.0  45.6
1  python  1991  222.0    67
2       c  1927  333.0  33.9
3      js  1995  444.0  59.5
4     php  2012  555.0  69.9
5     c++  1983  666.0    75
6      ss    dd   23.1    ff

这里可以看到在原数据的基础上新增了行索引为 6 的数据行。但这里要注意,如果行索引指定的是已存在行索引,则不会进行数据行的插入,而是替换了该数据行的数据值。
2. append () 方法新增数据行

append (other, ignore_index=False, verify_integrity=False) 是用来在数据表尾新增数据行,并返回新增后的数据对象,该方法不仅仅适用于 DataFrame 结构的数据,还可以用于 Series 数据的追加。
other 要添加的数据,可以是 Series、list、dict、dataframe 等等;
ignore_index 新增了数据后,会重新设置索引,忽略旧的索引;
verify_integrity 当为 True 时,如果和原数据的索引值相同,将会报错;

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
# 创建一个dataframe对象
data_new = pd.DataFrame([[99, 88, 77, 66], [55, 44, 33, 22]], columns=['编程语言', '推出时间', '价格', '创始人'])
# 使用append增加行
result_data = data.append(data_new)
print(result_data)
print(result_data.loc[0])
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
0      99    88   66  77.0
1      55    44   22  33.0
   编程语言  推出时间  创始人    价格
0  Java  1995  111  45.6
0    99    88   66  77.0

这里可以看到通过 append () 操作是将两个数据集进行行的合并,在 data 数据集的基础上,后面合并 data_new 数据行。这里的索引并不会产生冲突,因为我们没有设置 verify_integrity=True(默认的是为 False),如果我们设置了 ignore_index= True ,合并后生成的新的数据集索引值会重新排列,如下操作所示:

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
# 创建一个dataframe对象
data_new = pd.DataFrame([[99, 88, 77, 66], [55, 44, 33, 22]], columns=['编程语言', '推出时间', '价格', '创始人'])
# 使用append增加行
result_data = data.append(data_new,ignore_index=True)
print(result_data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
6      99    88   66  77.0
7      55    44   22  33.0
  • Pandas 删除数据

删除指定行或列:
1.删除指定行

drop (labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=‘raise’)
labels 标签(行标签或者列标签)
axis 表示删除行(axis=0 默认)或者删除列(axis=1)
index 删除的行索引名
columns 删除的列索引名
inplace 指定删除是否要在原数据上进行操作,默认是 False

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
data_res = data.drop(labels=[1,3])
print(data_res)
print(data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
   编程语言  推出时间  创始人    价格
0  Java  1995  111  45.6
2     c  1927  333  33.9
4   php  2012  555  69.9
5   c++  1983  666  75.0
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0

这里值得注意的是:在执行删除操作后我们再次打印了原 data 数据集,通过输出可以看到,data 的数据并没有被影响到,还是完整的数据集。这里如果我们的 inplace 参数设置了 True,则对应的删除操作后,原数据就会被修改,通过下面的代码可以看到操作效果:

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
data_res = data.drop(labels=[1,3],inplace=True)
print(data_res)
print(data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
None
   编程语言  推出时间  创始人    价格
0  Java  1995  111  45.6
2     c  1927  333  33.9
4   php  2012  555  69.9
5   c++  1983  666  75.0

这里可以看到 data_res 的输出结果为 None ,而 data 原数据集则被删除了 1 和 3 的索引行。这是因为当我们设置了 inplace=True 时,drop () 操作后就不会返回一个新的数据集,而是在原数据集的基础上进行了操作,在实际应用中,如果不是特别的需要,建议不要指定该参数为 True,不然会改变原有数据对其他的分析产生一定的影响。(inplace是参数,无论是删除行,列还是行和列,只要是用drop函数就可以通过令inplace=Ture改变原数据)

2.删除指定列

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
data_res = data.drop(labels=['推出时间','创始人'],axis=1)
print(data_res)
print(data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
     编程语言    价格
0    Java  45.6
1  python  67.0
2       c  33.9
3      js  59.5
4     php  69.9
5     c++  75.0
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0

同样设置inplace=Ture后,drop () 操作后就不会返回一个新的数据集,而是在原数据集的基础上进行了操作。

3.删除指定行和列

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
data_res = data.drop(index=4,columns=['价格'])
print(data_res)
print(data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
     编程语言  推出时间  创始人
0    Java  1995  111
1  python  1991  222
2       c  1927  333
3      js  1995  444
5     c++  1983  666
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0

删除特定数据的行:
这里我们讲的删除特定数据的行或列,其实并不是真正意义上的删除内容,而是通过数据条件的筛选过滤,得到一个新的数据集,从效果上看,也是去除了部分数据内容,达到了我们删除数据的实际需要。

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
data_res = data[data['价格']<50]
print(data_res)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
   编程语言  推出时间  创始人    价格
0  Java  1995  111  45.6
2     c  1927  333  33.9
  • Pandas 修改数据

修改索引值:

很多时候我们创建的数据,或者解析出来的数据,索引都是默认生成的,而我们为了方便数据的分析,需要对数据的行索引值或者列索引值进行修改,那这里
Pandas 中提供了一个函数 rename (self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors=‘ignore’),该函数通过灵活的参数设置,能够高效便捷的进行索引值的修改,下面我们列举了常用的几个参数说明:
mapper 这里是要传入的映射关系,可以是个字典或者函数
index 指定行索引
columns 指定列索引
axis 表示修改行索引(axis=0 默认)还是列索引(axis=1)
inplace 是否在原数据基础上修改,默认 inplace=False 会返回一个新的数据集

1.修改行索引

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# 修改行索引
data_res = data.rename(index={0: 'aa', 2: 'bb', 3: 'dd'})
# data_res = data.rename({0: 'aa', 2: 'bb', 3: 'dd'},axis=0)和上面等价
print(data_res)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
      编程语言  推出时间  创始人    价格
aa    Java  1995  111  45.6
1   python  1991  222  67.0
bb       c  1927  333  33.9
dd      js  1995  444  59.5
4      php  2012  555  69.9
5      c++  1983  666  75.0

2.修改列索引

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# 修改列索引
data_res = data.rename(columns={'编程语言': 'aa', '价格': 'bb'})
# data_res = data.rename({'编程语言': 'aa', '价格': 'bb'}, axis=1)和上面等价
print(data_res)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
       aa  推出时间  创始人    bb
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0

3.同时修改行和列索引

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# 修改行和列索引
data_res = data.rename(index={0: 'aa', 2: 'bb', 3: 'dd'},columns={'编程语言': 'aa', '价格': 'bb'})
print(data_res)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
        aa  推出时间  创始人    bb
aa    Java  1995  111  45.6
1   python  1991  222  67.0
bb       c  1927  333  33.9
dd      js  1995  444  59.5
4      php  2012  555  69.9
5      c++  1983  666  75.0

修改数据值:

1.修改单个数据值

修改单个数据值,是通过查询函数获取到某个数据,然后修改这个数据的内容,可以用函数 at []、iat []、loc []、iloc [],但要注意不同的函数所传递参数的不同,下面我们列举这四个函数的不同之处:
loc[] 只能使用标签索引,不能使用整数索引,通过标签索引切边进行筛选时
iloc[] 只能使用整数索引,不能使用标签索引,通过整数索引切边进行筛选时
at[] 只能使用标签索引,使用时必须输入两个参数,即行索引和列索引
iat[] 只能使用整数索引,使用时必须输入两个参数,即行索引和列索引
虽然四种函数都能获取单个数据值,进而进行修改,但从运行速度上四种方法从高到底分别为: iat []、at []、iloc []、loc [],这里我们选择 iat [] 演示对单个数据值的修改操作。

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# 对第2行,第3列修改数据
data.iat[1,2]=1234
print(data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
     编程语言  推出时间   创始人    价格
0    Java  1995   111  45.6
1  python  1991  1234  67.0
2       c  1927   333  33.9
3      js  1995   444  59.5
4     php  2012   555  69.9
5     c++  1983   666  75.0

我们通过 iat [] 对第 2 行,第 3 列数据进行修改,通过输出结果可看到原数据值为 222,这里被修改 1234

2.修改某类数据值

有时候我们需要对数据集中的一类数据进行修改,比如我们要将所有的 “1995 年” 换成字符串 “2000 年”,这时我们就需要用到函数
replace (to_replace=None,value=None……),该函数的两个核心参数 to_replace 表示要被替换的数据,value 是替换后的数据,该函数修改后,会返回新的数据集,不会影响到原数据。

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# 将所有的1995换成2020
new_data = data.replace(1995,2020)
print(new_data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
     编程语言  推出时间  创始人    价格
0    Java  2020  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  2020  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0

这里可以看到原数据中所有的 “1995 年” 都被改成了 “2000 年”。这里我们要被修改的值也可以传入列表的形式,指定多个被修改的数据值,如下面代码所示:

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# 将所有的1995换成2020
new_data = data.replace([1995,2012,1983],2020)
print(new_data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
     编程语言  推出时间  创始人    价格
0    Java  2020  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  2020  444  59.5
4     php  2020  555  69.9
5     c++  2020  666  75.0

3.修改某区域数据值

我们还可以对某些行或列的数据进行统一的修改操作,这里我们可以使用函数 loc () 或 iloc () ,只是要注意传入的参数不同。下面我们使用 iloc () 修改整行或整列的数据操作:

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)

# 这里我们创建了一个新的数据集
data_new = pd.DataFrame([["11", "22", "33.5", "44"], ["55", "66", "77.7", "88"]],
                        columns=["编程语言", "推出时间", "价格", "创始人"])

data.iloc[[0, 1]] = data_new
print(data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
  编程语言  推出时间  创始人    价格
0   11    22   44  33.5
1   55    66   88  77.7
2    c  1927  333  33.9
3   js  1995  444  59.5
4  php  2012  555  69.9
5  c++  1983  666    75

我们创建了一个新的数据集,用来替换原数据第 1 行和第 2 行的数据,通过输出结果可以看到被修改后的数据集。

import pandas as pd

data_path = "C:/Users/Dell/Desktop/demo.xlsx"
data = pd.read_excel(data_path)
print(data)

new_series = pd.Series(['11','22','33','44','55','66'])
data.iloc[:,[1]]=new_series
print(data)
     编程语言  推出时间  创始人    价格
0    Java  1995  111  45.6
1  python  1991  222  67.0
2       c  1927  333  33.9
3      js  1995  444  59.5
4     php  2012  555  69.9
5     c++  1983  666  75.0
     编程语言 推出时间  创始人    价格
0    Java   11  111  45.6
1  python   22  222  67.0
2       c   33  333  33.9
3      js   44  444  59.5
4     php   55  555  69.9
5     c++   66  666  75.0

这里我们新建一个 Series 对象用来替换第二列的数据值,通过输出结果可以看到为我们第二列的数据值被修改的结果。

小结:

  • 查询数据:

loc () 查询函数
1.按单个值查询
2.按列表查询
3.按区间查询
4.按条件查询
5.按函数查询

  • 增加数据:

1.新增列
直接新增数据列
insert (loc, column, value, allow_duplicates=False) 函数
2.新增行
loc () 方法新增数据行
append (other, ignore_index=False, verify_integrity=False) 函数

  • 删除数据:

1.删除指定行列
drop (labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=‘raise’) 函数
(删除行或列用labels和axis和inplace参数即可
删除行和列用index 和columns和inplace参数即可)
2.删除特定数据行列
data[data['价格']<50]

  • 修改数据:

1.修改索引值
rename (self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors=‘ignore’)函数

2.修改数据值
修改单个数据值
iat [] 函数
修改某类数据值
replace (to_replace=None,value=None……)函数
修改某区域数据值
loc () 或 iloc () 函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值