pandas3 DataFrame数据的查询编辑

3.DataFrame数据的查询和编辑

通过列索引标签或者属性的方式可以单独获取DataFrame的列数据,返回数据类型为Series。 在选取列时不能使用切片的方式,超过一个列名用 df[['列名1','列名2']]


import pandas as pd
import numpy as np
data = {
    'name':['张三','李四','王麻子'],
    'age':[21,19,23],
    'address':['兰州','上海','北京']
}
df = pd.DataFrame(data)
print(df)
w1 = df['name']
print("以列名取一列数据:\n", w1)
w2 = df[['name','age']]
print("以列名取两份数据:\n", w2)

name  age address
0   张三   21      兰州
1   李四   19      上海
2  王麻子   23      北京
以列名取一列数据:
 0     张三
1     李四
2    王麻子
Name: name, dtype: object
以列名取两份数据:
   name  age
0   张三   21
1   李四   19
2  王麻子   23

通过行索引或者行索引位置切片形式获取行数据【从0开始的,左闭右开】。 DataFrame提供的head【开头开始】和tail【结尾】可以取连续多行数据,sample可以随机抽取并显示数据


print('显示前两行:\n', df[:2])
print('显示2行:\n', df[1:2])

print(df.head())
print(df.head(1))

print(df.tail())
print(df.tail(1))

print(df.sample(2))
显示前两行:
   name  age address
0   张三   21      兰州
1   李四   19      上海
显示2行:
   name  age address
1   李四   19      上海
  name  age address
0   张三   21      兰州
1   李四   19      上海
2  王麻子   23      北京
  name  age address
0   张三   21      兰州
  name  age address
0   张三   21      兰州
1   李四   19      上海
2  王麻子   23      北京
  name  age address
2  王麻子   23      北京
  name  age address
2  王麻子   23      北京
1   李四   19      上海

切片选取行限制比较大,取单独的几行数据可以采用Pandas提供的iloc和loc方法实现。

用法:DataFrame.loc(行索引位置, 列索引位置)

​ DataFrame.loc(行索引名称或条件, 列索引名称)


data = {
    'name':['张飞', '孙尚香', '韩信', '貂蝉', '马超'],
    'location':['游走', '下路', '打野', '中单', '上单'],
    'dynasty':['蜀', '蜀', '战国', '汉', '蜀'],
    'year':[1999, 2000, 2020, 2050, 3030]
}
df1 = pd.DataFrame(data, columns=['name','location','dynasty','address','year'],index=['a','b','c','d','e'])
df2 = df1.set_index('dynasty')
print(df2)
print("取name和year两列的数据:\n",df2.loc[:,['name','year']])
print("取汉,战国行中name,year的数据:\n",df2.loc[['汉','战国'],['name','year']])
        name location address  year
dynasty
蜀         张飞       游走     NaN  1999
蜀        孙尚香       下路     NaN  2000
战国        韩信       打野     NaN  2020
汉         貂蝉       中单     NaN  2050
蜀         马超       上单     NaN  3030
取name和year两列的数据:
         name  year
dynasty
蜀         张飞  1999
蜀        孙尚香  2000
战国        韩信  2020
汉         貂蝉  2050
蜀         马超  3030
取汉,战国行中name,year的数据:
         name  year
dynasty
汉         貂蝉  2050
战国        韩信  2020

print("显示前两列:\n", df2.iloc[:, 2])
print("显示第1和第3行的第2列:\n", df2.iloc[[1,3],[0]])
显示前两列:
 dynasty
蜀     1999
蜀     2000
战国    2020
汉     2050
蜀     3030
Name: year, dtype: int64
显示第1和第3行的第二列:
         name
dynasty
蜀        孙尚香
汉         貂蝉

也可以使用ix方法实现行和列的选择,同时支持索引标签和索引位置取值。

用选择符不等于(!=)、与(&)、或(|)

df3 = df2[df2['year'] == 3030]
print(df3,type(df3))
df2['name']=='孙尚香'
        name location  year
dynasty
蜀         马超       上单  3030 <class 'pandas.core.frame.DataFrame'>

dynasty
蜀     False
蜀      True
战国    False
汉     False
蜀     False
Name: name, dtype: bool

增加一行通过append方法传入字典结构数据即可,增加列时为增加的列赋值即可创建一个新的列,具体给值要对应,不然会报错


df1['C'] = 10
df1['age'] = [24,33,19,40,80]

data1 = {
    'name':'李白',
    'location':'打野',
    'dynasty':'唐',
    'year':'1909'
}
df1.append(data1,ignore_index=True)
  name location dynasty  year   C  age
0   张飞       游走       蜀  1999  10   24
1  孙尚香       下路       蜀  2000  10   33
2   韩信       打野      战国  2020  10   19
3   貂蝉       中单       汉  2050  10   40
4   马超       上单       蜀  3030  10   80

name    location    dynasty year    C   age
0   张飞  游走  蜀   1999    10.0    24.0
1   孙尚香 下路  蜀   2000    10.0    33.0
2   韩信  打野  战国  2020    10.0    19.0
3   貂蝉  中单  汉   2050    10.0    40.0
4   马超  上单  蜀   3030    10.0    80.0
5   李白  打野  唐   1909    NaN

删除数据直接用drop方法,行列数据通过axis参数设置默认为0删除行,1删除列。默认数据删除不修改原数据,如果在原数据上删除加入参数inplace=True即可。


df1.drop('C',axis=1)
print(df1)
  name location dynasty  year   C  age
0   张飞       游走       蜀  1999  10   24
1  孙尚香       下路       蜀  2000  10   33
2   韩信       打野      战国  2020  10   19
3   貂蝉       中单       汉  2050  10   40
4   马超       上单       蜀  3030  10   80

df1.drop('C',axis=1,inplace=True)
print(df1)

  name location dynasty  year  age
0   张飞       游走       蜀  1999   24
1  孙尚香       下路       蜀  2000   33
2   韩信       打野      战国  2020   19
3   貂蝉       中单       汉  2050   40
4   马超       上单       蜀  3030   80

对选择的数据进行赋值就可以了。修改数据是对DataFrame值的修改,无法撤销。如新列赋值。

Original: https://blog.csdn.net/qq_43636709/article/details/115819887
Author: bigdata7
Title: pandas3 DataFrame数据的查询编辑

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/753283/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球