Python 之 Pandas DataFrame 数据类型的行操作和常用属性和方法汇总

  • DataFrame 是 Pandas 的重要数据结构之一,也是在使用 Pandas 进行数据分析过程中最常用的结构之一,可以这么说,掌握了 DataFrame 的用法,你就拥有了学习数据分析的基本能力。
  • 在开始之前,我们需要先引入 numpy 和 pandas 库。
import numpy as np​
import pandas as pd

一、DataFrame 行操作

1. 标签选取

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
     'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print("===========df原始数据========")
print(df)
#===========df原始数据========
#    one  two
# a  1.0    1 
# b  2.0    2 
# c  3.0    3 
# d  NaN    4
print("===========标签为b的数据========")
print(df.loc['b'])
#===========标签为b的数据========
#one    2.0
#two    2.0
#Name: b, dtype: float64
df.loc['b',"one"]
#2.0
df.loc['b':'d',"one"]   # 注意
#b    2.0
#c    3.0
#d    NaN
#Name: one, dtype: float64
df.loc[['a','b'],["one","two"]]
#   one	 two
#a	1.0	   1
#b	2.0	   2
s = np.arange(12).reshape((3,4))
s
#array([[ 0,  1,  2,  3],
#          [ 4,  5,  6,  7], 
#          [ 8,  9, 10, 11]])
s[[0,2],[0,3]]
#array([ 0, 11])

2. 数值型索引和切片

data = {'Name':['关羽', '刘备', '张飞', '曹操'],'Age':[28,34,29,42]}
index = ["rank1", "rank2", "rank3", "rank4"]
df = pd.DataFrame(data, index=index)
df
#       Name   Age
#rank1	关羽	28
#rank2	刘备	34
#rank3	张飞	29
#rank4	曹操	42
df.iloc[2]
#Name    张飞
#Age     29
#Name: rank3, dtype: object
df.iloc[[0,2]]
Name	Age
rank1	关羽	28
rank3	张飞	29
df.iloc[0,1]
#28
#df.loc[1,"Name"]
#df.iloc[1,"Name"]

3. 切片操作多行选取

data = {'Name':['关羽', '刘备', '张飞', '曹操'],'Age':[28,34,29,42]}
index = ["rank1", "rank2", "rank3", "rank4"]
df = pd.DataFrame(data, index=index)
df
#       Name    Age
#rank1	关羽	28
#rank2	刘备	34
#rank3	张飞	29
#rank4	曹操	42
print("=====df.iloc[1:3]:=======")
print(df.iloc[1:3])
#=====df.iloc[1:3]:=======
#      Name  Age
#rank2   刘备   34
#rank3   张飞   29
print("=====df[1:3]:=======")
print(df[1:3])
#=====df[1:3]:=======
#        Name  Age
#rank2   刘备   34
#rank3   张飞   29

4. 添加数据行

df.append(other, ignore_index=False, verify_integrity=False, sort=False)
data = {
            'Name':['关羽', '刘备', '张飞', '曹操'], 
            'Age':[28, 34, 29, 42],
            "Salary":[5000, 8000, 4500, 10000]
       }
df = pd.DataFrame(data)
df
#	Name	Age	 Salary
# 0	关羽	28 	  5000
# 1	刘备	34	  8000 
# 2	张飞	29	  4500
# 3	曹操	42	  10000

4.1 追加字典

d2 = {"Name":"诸葛亮", "Age":30}
df3 = df.append(d2)
print(df3)
d2 = {"Name":"诸葛亮", "Age":30}
df3 = df.append(d2, ignore_index=True) # 需要添加 
print(df3)
#    Name    Age   Salary
#0   关羽     28   5000.0
#1   刘备     34   8000.0
#2   张飞     29   4500.0
#3   曹操     42   10000.0
#4   诸葛亮   30   NaN
d2 = {"Name":"诸葛亮", "Age":30}​
s = pd.Series(d2, name="a")
print(s)
df3 = df.append(s)
print(df3)
#Name    诸葛亮 
#Age      30 
#Name: a, dtype: object
#    Name    Age   Salary 
#0   关羽     28   5000.0 
#1   刘备     34   8000.0 
#2   张飞     29   4500.0 
#3   曹操     42   10000.0 
#a  诸葛亮   30   NaN

4.2 追加列表

data = [
             [1, 2, 3, 4],
             [5, 6, 7, 8]
        ]              
df = pd.DataFrame(data)
print(df)
#   0  1  2  3
#0  1  2  3  4
#1  5  6  7  8
a_l = [10,20]​
df3 = df.append(a_l)
print(df3)
#    0    1    2    3
#0   1  2.0  3.0  4.0 
#1   5  6.0  7.0  8.0 
#0  10  NaN  NaN  NaN 
#1  20  NaN  NaN  NaN
a_l = [[10,"20",30],[2,5,6]]
df4 = df.append(a_l) 
print(df4)
#    0   1   2    3
#0   1   2   3  4.0 
#1   5   6   7  8.0 
#0  10  20  30  NaN 
#1   2   5   6  NaN
print("=========使用:ignore_index=True===========")
df5 = df.append(a_l,ignore_index=True) # 需要添加 
print(df5)
#=========使用:ignore_index=True===========
#     0   1   2    3 
#0   1   2   3  4.0 
#1   5   6   7  8.0 
#2  10  20  30  NaN 
#3   2   5   6  NaN

5. 删除数据行

​- 可以使用行索引标签,从 DataFrame 中删除某一行数据。如果索引标签存在重复,那么它们将被一起删除。示例如下:

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])​
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])​
df = df.append(df2)
print("=======源数据df=======")
print(df)
#=======源数据df=======
#   a  b 
#0  1  2 
#1  3  4 
#0  5  6 
#1  7  8
df1 = df.drop(0)
print("=======修改后数据df1=======")
print(df1)
=======修改后数据df1=======
#    a  b 
#1  3  4 
#1  7  8

二、常用属性和方法汇总

名称属性&方法描述
T行和列转置。
axes返回一个仅以行轴标签和列轴标签为成员的列表。
dtypes返回每列数据的数据类型。
emptyDataFrame中没有数据或者任意坐标轴的长度为0,则返回True
columns返回DataFrame所有列标签
shape返回一个元组,获取行数和列数,表示了 DataFrame 维度。
sizeDataFrame中的元素数量。
values使用 numpy 数组表示 DataFrame 中的元素值。
head()返回前 n 行数据。
tail()返回后 n 行数据。
rename()rename(columns=字典) ,修改列名
info()可以显示信息,例如行数/列数,总内存使用量,每列的数据类型以及不缺少值的元素数
sort_index()默认根据行标签对所有行排序,或根据列标签对所有列排序,或根据指定某列或某几列对行排序。
sort_values()既可以根据列数据,也可根据行数据排序
data = {
            'Name':['关羽', '刘备', '张飞', '曹操'], 
            'Age':[28, 34, 29, 42],
            "Salary":[5000, 8000, 4500, 10000]
       }
df = pd.DataFrame(data)
df
#	Name	Age	Salary 
#0	关羽	28	5000 
#1	刘备	34	8000 
#2	张飞	29	4500 
#3	曹操	42	10000

1. 转置

df.T
	       0	   1	   2	   3
Name	关羽	刘备	张飞	曹操 
Age	      28	  34	  29	  42 
Salary	5000	8000	4500   10000	

2. axes

print(df.axes)
[df.index,df.columns]
#[RangeIndex(start=0, stop=4, step=1), Index(['Name', 'Age', 'Salary'], dtype='object')]

3. dtypes

df.dtypes
Name      object
Age           int64
Salary       int64
dtype: object

4. empty

df.empty
#False
empty_df = pd.DataFrame()
empty_df.empty 
#True

5. columns

df.columns
#Index(['Name', 'Age', 'Salary'], dtype='object')
len(df.columns)
#3
df.columns.size
#3

6. shape

df.shape
#(4,3)
row_num,column_num = df.shape
print(row_num,column_num )
#4 3

7. values

df.values
#array([['关羽', 28, 5000], 
#          ['刘备', 34, 8000],        
#          ['张飞', 29, 4500],        
#          ['曹操', 42, 10000]], dtype=object)

8. head() & tail()

df.head(3)
#	Name	Age	Salary 
#0	关羽	28	5000 
#1	刘备	34	8000 
#2	张飞	29	4500
df.tail(3)
#	Name	Age	Salary 
#1	刘备	34	8000 
#2	张飞	29	4500 
#3	曹操	42	10000

9. 修改列名 rename()

DataFrame.rename(index=None, columns=None, inplace=False)
df
#	Name	Age	Salary 
#0	关羽	28	5000 
#1	刘备	34	8000 
#2	张飞	29	4500 
#3	曹操	42	10000
df.rename(index={1:"row2", 2:"row3"})
df
#	Name	Age	Salary 
#0	关羽	28	5000 
#row2	刘备	34	8000 
#row3	张飞	29	4500 
#3	曹操	42	10000
df.rename(columns = {"Name":"name", "Age":"age"})
df
#	name	age	Salary 
#0	关羽	28	5000 
#1	刘备	34	8000 
#2	张飞	29	4500 
#3	曹操	42	10000
df.rename(index={1:"row2", 2:"row3"}, columns = {"Name":"name", "Age":"age"}, inplace=True)
df
#	name	age	Salary 
#0	关羽	28	5000 
#row2	刘备	34	8000 
#row3	张飞	29	4500 
#3	曹操	42	10000

10. info() 函数

data = {"name":"诸葛亮","age":30}
df = df.append(data, ignore_index =True)
df
#	name	age	Salary 
#0	关羽	28	5000.0 
#1	刘备	34	8000.0 
#2	张飞	29	4500.0 
#3	曹操	42	10000.0 
#4	诸葛亮	30	NaN
df.info()
#<class 'pandas.core.frame.DataFrame'> 
#RangeIndex: 5 entries, 0 to 4 
#Data columns (total 3 columns):  
##   Column  Non-Null Count  Dtype   
#---  ------  --------------  -----    
#0   name    5 non-null      object   
#1   age     5 non-null      int64    
#2   Salary  4 non-null      float64 
#dtypes: float64(1), int64(1), object(1) 
#memory usage: 248.0+ bytes

11. df. sort_index() 函数

sort_index(axis=0, ascending=True, inplace=False)
df = pd.DataFrame({'b':[1,2,2,3],'a':[4,3,2,1],'c':[1,3,8,2]},index=[2,0,1,3])  
df 
#    b	a	c 
#2	1	4	1 
#0	2	3	3 
#1	2	2	8 
#3	3	1	2 
df.sort_index()
#    b	a	c 
#0	2	3	3 
#1	2	2	8 
#2	1	4	1 
#3	3	1	2 
df.sort_index(axis=1)
#   a	b	c 
#2	4	1	1 
#0	3	2	3 
#1	2	2	8 
#3	1	3	2 

12. df.sort_values() 函数

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')
df = pd.DataFrame({'b':[1,2,3,2],'a':[4,3,2,1],'c':[1,3,8,2]},index=[2,0,1,3]) 
df
#	b	a	c 
#2	1	4	1 
#0	2	3	3 
#1	3	2	8 
#3	2	1	2
df.sort_values(by='b') 
print(df)
#	b	a	c 
#2	1	4	1 
#0	2	3	3 
#3	2	1	2 
#1	3	2	8
df.sort_values(by=['b','a'],ascending=[False,True]) 
print(df)
#   b	a	c 
#1	3	2	8 
#3	2	1	2 
#0	2	3	3 
#2	1	4	1
df.sort_values(by=3,axis=1)
print(df)
#	a	b	c 
#2	4	1	1 
#0	3	2	3 
#1	2	3	8 
#3	1	2	2
df.sort_values(by=[3,0],axis=1,ascending=[True,False])
print(df)
#	a	b	c 
#2	4	1	1 
#0	3	3	2 
#1	2	8	3 
#3	1	2	2

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年3月10日
下一篇 2023年3月10日

相关推荐