Python pandas DataFrame

Python 中的 Pandas DataFrame 是一种二维数据结构。这意味着数据框以表格形式(即行和列)存储数据。

本文将展示如何创建 DataFrame,以及如何访问和修改行和列。接下来,我们将讨论库中的转置 DataFrame、迭代行等。

如何在 Python 中创建 pandas DataFrame?

在实时应用中,我们使用这个 Python Pandas DataFrame 从 SQL Server、文本文件、Excel 文件或任何 CSV 文件加载数据。然后,我们根据需要对数据进行切片和切块。最后,一旦数据达到我们所需的格式,我们就使用这些数据通过 matplotlib 模块创建报告、图表或图形。

在 Python pandas 中创建空 DataFrame

这是一个创建空 DataFrame 的简单示例。在这里,我们创建一个空的 DataFrame。

import pandas as pd
 
data = pd.DataFrame()
print(data)

创建空 DataFrame 输出

Columns: []
Index: []

从列表创建 Python pandas DataFrame

在这里,我们创建了一个整数值列表。然后,我们使用 DataFrame 函数从列表中创建我们的 df,或将列表转换。

table = [1, 2, 3, 4, 5]

data = pd.DataFrame(table)
print(data)
   0
0  1
1  2
2  3
3  4
4  5

从混合列表创建或将混合列表转换为 Pandas Data Frame。在这里,我们也使用了多行和多列。

mixedtable = [[1, 'Suresh'], [2, 'Python'], [3, 'Hello']]

mixeddata = pd.DataFrame(mixedtable)
print(mixeddata)

我们必须使用 columns 参数为列值指定名称。例如,以下代码为列提供了名称,而不是 1 和 2。

mixdata = pd.DataFrame(mixedtable, columns = ['S.No', 'Name'])
print(mixdata)
   0       1
0  1  Suresh
1  2  Python
2  3   Hello

# WIth Names Output
   S.No    Name
0     1  Suresh
1     2  Python
2     3   Hello

随机数的 Python pandas DataFrame

为了使用随机数创建 DataFrame,我们使用了 numpy 随机函数来生成大小为 8 * 4 的随机数。然后,我们使用该函数将这些序列转换为 DataFrame。

import numpy as np
import pandas as pd
 
d_frame = pd.DataFrame(np.random.randn(8, 4))
print(d_frame)
          0         1         2         3
0 -0.492116 -0.824771 -0.869890 -1.753722
1 -0.733930  0.947616  0.089861  0.888474
2 -0.948483 -1.002449 -0.283761 -0.207897
3  0.013346  2.059951  1.064830  0.830474
4  0.289157 -0.418271 -0.770464  0.223895
5 -0.781827 -0.396441  0.123848 -0.824002
6  0.667090  0.183589  1.212163  0.231251
7  1.067570 -0.615639  0.461147 -1.365541

来自 dict 的 Python Pandas DataFrame

它允许您从 dict 或字典创建 DataFrame。这非常直接。您所要做的就是声明一个包含不同值的字典,然后使用该函数将该字典转换为 DataFrame。

table = {'name': ['John', 'Mike', 'Suresh', 'Tracy'],
         'Salary':[1000000, 1200000, 900000, 1100000]
         }
 
data = pd.DataFrame(table)
print(data)

要从 dict 创建 df,所有字典值应与所有键的长度相同。否则,它会引发错误。接下来,如果您传递索引值,它们应与键值或数组的长度匹配;否则,它会引发错误。最后,如果您没有传递任何索引值,它将自动为您创建索引,从 0 到 n-1。

     name   Salary
0    John  1000000
1    Mike  1200000
2  Suresh   900000
3   Tracy  1100000

让我再举一个从字典创建 DataFrame 的例子。这次,我们正在转换四列数据的 Python 字典键。

table = {'name': ['John', 'Mike', 'Suresh', 'Tracy'],
         'Age': [25, 32, 30, 26],
         'Profession': ['Developer', 'Analyst', 'Admin', 'HR'],
         'Salary':[1000000, 1200000, 900000, 1100000]
         }

data = pd.DataFrame(table)
print(data)
Pandas Create DataFrame from dict 2

如何从列表字典创建 Python pandas DataFrame

如果您对将所有内容放在一个地方感到困惑,请将其分成几部分。在这里,我们声明了四个项目列表,并为每个列分配了它们。

names = ['John', 'Mike', 'Suresh', 'Tracy']
ages =  [25, 32, 30, 26]
Professions = ['Developer', 'Analyst', 'Admin', 'HR']
Salaries = [1000000, 1200000, 900000, 1100000]
	      
table = {'name': names,
         'Age': ages,
         'Profession': Professions,
         'Salary': Salaries
         }
	      
data = pd.DataFrame(table)
print(data)
     name  Age Profession   Salary
0    John   25  Developer  1000000
1    Mike   32    Analyst  1200000
2  Suresh   30      Admin   900000
3   Tracy   26         HR  1100000

日期的 DataFrame

您还可以使用此模块创建一系列日期的 DataFrame。例如,让我创建一个包含 2019-01-01 到 2019-01-08 日期的 DataFrame。通过更改 period 值,您可以生成更多日期序列。

dates = pd.date_range('20190101', periods = 8)
print(dates)
print()

d_frame = pd.DataFrame(np.random.randn(8, 4), index = dates,
                       columns = {'apples', 'oranges', 'kiwis', 'bananas'})
print(d_frame)
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
               '2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08'],
              dtype='datetime64[ns]', freq='D')

               kiwis    apples   oranges   bananas
2019-01-01 -0.393538 -0.406943  1.612431  1.089230
2019-01-02  1.070080 -1.565538  0.727056  1.677534
2019-01-03 -1.324169  0.256827  1.332544 -2.952971
2019-01-04  0.419778 -0.562119  0.507846 -0.223730
2019-01-05  0.175785  1.566511 -1.832633  2.035536
2019-01-06  0.541516 -0.113477  0.444046  0.387718
2019-01-07  0.247760 -1.143530  0.615681  0.400743
2019-01-08 -0.242328  0.913758 -0.088591 -0.533690

Python pandas DataFrame 列

此示例显示了如何重新排序列。默认情况下,数据框将使用我们在实际数据中使用的列顺序。但是,您可以使用此参数更改任何列的位置。例如,让我将 Age 从第二个位置更改为第四个位置。

table = {'name': ['John', 'Mike', 'Suresh', 'Tracy'],
         'Age': [25, 32, 30, 26],
         'Profession': ['Developer', 'Analyst', 'Admin', 'HR'],
         'Salary':[1000000, 1200000, 900000, 1100000]
         }

data = pd.DataFrame(table)
print(data)

print('\n---- After Changing the Order-----')
data2 = pd.DataFrame(table, columns = ['name', 'Profession', 'Salary', 'Age'])
print(data2)

使用此列参数时请小心。如果我们指定,任何不存在的列名或拼写错误都将返回 NaN。让我使用 Qualification 列名(它不存在)

print('\n---- Using Wrong Col -----')
data3 = pd.DataFrame(table, columns = ['name', 'Qualification', 'Salary', 'Age'])
print(data3)

columns 属性以相同的顺序和数据类型返回数据框中可用列的列表。

print(data.columns)
print(data2.columns)
print(data3.columns)

输出

     name  Age Profession   Salary
0    John   25  Developer  1000000
1    Mike   32    Analyst  1200000
2  Suresh   30      Admin   900000
3   Tracy   26         HR  1100000

---- After Changing the Order-----
     name Profession   Salary  Age
0    John  Developer  1000000   25
1    Mike    Analyst  1200000   32
2  Suresh      Admin   900000   30
3   Tracy         HR  1100000   26

---- Using Wrong Col -----
     name Qualification   Salary  Age
0    John           NaN  1000000   25
1    Mike           NaN  1200000   32
2  Suresh           NaN   900000   30
3   Tracy           NaN  1100000   26

Index(['name', 'Age', 'Profession', 'Salary'], dtype='object')
Index(['name', 'Profession', 'Salary', 'Age'], dtype='object')
Index(['name', 'Qualification', 'Salary', 'Age'], dtype='object')

Python Pandas DataFrame 索引

默认情况下,它将索引值从 0 分配到 n-1,其中 n 是最大数量。但是,您可以使用 index 属性更改这些默认索引值。在这里,我们使用相同的并分配从 a 到 d 的字母作为索引值,而不是 0 到 N – 1。

# Index Values are a, b, c, d
data2 = pd.DataFrame(table, index = ['a', 'b', 'c', 'd'])
print('\n----After Setting Index Values----')
print(data2)

您可以使用 set_index 函数更改或设置列作为索引值。在这里,我们使用这个 set_index 函数,而不是将名称设置为索引。接下来,loc 函数显示我们可以使用索引名称获取额外信息。

print('\n---Setting name as an index---')
new_data = data.set_index('name')
print(new_data)

print('\n---Return Index John Details---')
print(new_data.loc['John'])
----After Setting Index Values----
     name  Age Profession   Salary
a    John   25  Developer  1000000
b    Mike   32    Analyst  1200000
c  Suresh   30      Admin   900000
d   Tracy   26         HR  1100000

---Setting name as an index---
        Age Profession   Salary
name                           
John     25  Developer  1000000
Mike     32    Analyst  1200000
Suresh   30      Admin   900000
Tracy    26         HR  1100000

---Return Index John Details---
Age                  25
Profession    Developer
Salary          1000000
Name: John, dtype: object

DataFrame 属性

Python DataFrame 中可用的 pandas 属性列表。

DataFrame shape 属性

Pandas shape 属性返回其中行数和列数的形状或元组。

import pandas as pd
 
table = {'name': ['John', 'Mike', 'Suresh', 'Tracy'],
         'Age': [25, 32, 30, 26],
         'Profession': ['Developer', 'Analyst', 'Admin', 'HR'],
         'Salary':[1000000, 1200000, 900000, 1100000]
         }

data = pd.DataFrame(table)

print('\n---Shape or Size ---')
print(data.shape)
---Shape or Size ---
(4, 3)

DataFrame values 属性

values 属性以二维数组格式返回数据(不带列名)。

data2 = pd.DataFrame(table, columns = ['name', 'Profession', 'Salary', 'Age'])

data3 = pd.DataFrame(table, columns = ['name', 'Qualification', 'Salary', 'Age'])

print('---Data2 Values--- ')
print(data2.values)

print('\n---Data3 Values--- ')
print(data3.values)
---Data2 Values--- 
[['John' 'Developer' 1000000 25]
 ['Mike' 'Analyst' 1200000 32]
 ['Suresh' 'Admin' 900000 30]
 ['Tracy' 'HR' 1100000 26]]

---Data3 Values--- 
[['John' nan 1000000 25]
 ['Mike' nan 1200000 32]
 ['Suresh' nan 900000 30]
 ['Tracy' nan 1100000 26]]

上面的示例返回类型为 Object 的数组,因为这两个数据框都包含混合内容(int、string)。如果不是这种情况,它不会在数组中显示任何 dtype。为此,我们使用了整数数据框。

table = {'Age': [25, 32, 30, 26],
         'Salary':[1000000, 1200000, 900000, 1100000]
         }

data4 = pd.DataFrame(table)
print(data4.values)
[[     25 1000000]
 [     32 1200000]
 [     30  900000]
 [     26 1100000]]

DataFrame name 属性

DataFrame 索引和列都有一个 name 属性,它允许为索引或列分配名称。同样,我们可以使用 Python pandas DataFrame 的列标签属性来为列标题分配名称。

data.index.name = 'Emp No'
print(data)
print()

data4.index.name = 'Cust No'
print(data4)

# Assign a Name for Column Headers
data.columns.name = 'Employee Details'
print(data)
 
data4.columns.name = 'Customers Information'
print(data4)
          name  Age Profession   Salary
Emp No                                 
0         John   25  Developer  1000000
1         Mike   32    Analyst  1200000
2       Suresh   30      Admin   900000
3        Tracy   26         HR  1100000

         Age   Salary
Cust No              
0         25  1000000
1         32  1200000
2         30   900000
3         26  1100000

# Assign a Name for Column Headers

Employee Details    name  Age Profession   Salary
Emp No                                           
0                   John   25  Developer  1000000
1                   Mike   32    Analyst  1200000
2                 Suresh   30      Admin   900000
3                  Tracy   26         HR  1100000

Customers Information  Age   Salary
Cust No                            
0                       25  1000000
1                       32  1200000
2                       30   900000
3                       26  1100000

DataFrame dtype 属性

dtype 属性返回数据结构中每个列的数据类型。

print('\n---dtype attribute result---')
print(data.dtypes)

dtype 属性输出

---dtype attribute result---
name          object
Age            int64
Profession    object
Salary         int64
dtype: object

DataFrame describe 函数

使用此 describe 函数可以快速获取有关它的统计信息。

print('\n---describe function result---')
print(data.describe())

describe 函数输出

---describe function result---
             Age        Salary
count   4.000000  4.000000e+00
mean   28.250000  1.050000e+06
std     3.304038  1.290994e+05
min    25.000000  9.000000e+05
25%    25.750000  9.750000e+05
50%    28.000000  1.050000e+06
75%    30.500000  1.125000e+06
max    32.000000  1.200000e+06

如何访问 Python pandas DataFrame 数据?

DataFrame 中的数据以行和列的表格格式存储。这意味着您可以使用列和行访问项目。

访问 DataFrame 列

您可以通过两种方式访问列:在 [] 中或在点表示法后指定列名。这两种方法都将指定列作为 Series 返回。

print('\n-----Accessing Columns-----')
print(data.Age)
print(data['name'])
print(data2.Salary)

# We can also access multiple columns
print('\n-----Accessing Multiple Cols-----')
print(data[['Age', 'Profession']])
print(data2[['name', 'Salary']])
-----Accessing Columns-----
0    25
1    32
2    30
3    26
Name: Age, dtype: int64
0      John
1      Mike
2    Suresh
3     Tracy
Name: name, dtype: object
0    1000000
1    1200000
2     900000
3    1100000
Name: Salary, dtype: int64

-----Accessing Multiple Cols-----
   Age Profession
0   25  Developer
1   32    Analyst
2   30      Admin
3   26         HR
     name   Salary
0    John  1000000
1    Mike  1200000
2  Suresh   900000
3   Tracy  1100000

这是访问列的另一个示例。

table = {'name': ['Kane', 'John', 'Suresh', 'Tracy', 'Steve'],
         'Age': [35, 25, 32, 30, 29],
         'Profession': ['Manager', 'Developer', 'Analyst', 'Admin', 'HR'],
         'Sale':[422.19, 22.55, 119.470, 200.190, 44.55],
         'Salary':[12000, 10000, 14000, 11000, 14000]
	    }
data = pd.DataFrame(table)

print('\n---Select name column ---')
print(data['name'])

print('\n---Select Profession and Sale column ---')
print(data[['Profession', 'Sale']])

print('\n---Select Profession column ---')
print(data.Profession)
Access Pandas DataFrame Columns

访问 DataFrame 行

Python 中的 Pandas DataFrame 也可以使用行访问。在这里,我们使用索引切片技术返回所需的行。在这里,data[1:] 返回数据结构中从索引 1 到 n-1 的所有记录,data[1:3] 返回从索引 1 到 3 的行。

table = {'Fullname': ['Kane', 'John', 'Suresh', 'Tracy', 'Steve'],
         'Age': [35, 25, 32, 30, 29],
         'Designation': ['Manager', 'Developer', 'Analyst', 'Admin', 'HR'],
         'SaleAmount':[422.19, 22.55, 119.470, 200.190, 44.55],
         'Income':[12000, 10000, 14000, 11000, 14000]
	    }
data = pd.DataFrame(table)
#print(data)

print('\n---Select all rows from 1 to N ---')
print(data[1:])

print('\n---Select rows from 1 to 2 ---')
print(data[1:3])

print('\n---Select rows from 0 to 3 ---')
print(data[0:4])

print('\n---Select last row ---')
print(data[-1:])

---Select all rows from 1 to N ---
  Fullname  Age Designation  SaleAmount  Income
1     John   25   Developer       22.55   10000
2   Suresh   32     Analyst      119.47   14000
3    Tracy   30       Admin      200.19   11000
4    Steve   29          HR       44.55   14000

---Select rows from 1 to 2 ---
  Fullname  Age Designation  SaleAmount  Income
1     John   25   Developer       22.55   10000
2   Suresh   32     Analyst      119.47   14000

---Select rows from 0 to 3 ---
  Fullname  Age Designation  SaleAmount  Income
0     Kane   35     Manager      422.19   12000
1     John   25   Developer       22.55   10000
2   Suresh   32     Analyst      119.47   14000
3    Tracy   30       Admin      200.19   11000

---Select last row ---
  Fullname  Age Designation  SaleAmount  Income
4    Steve   29          HR       44.55   14000

DataFrame loc 方法示例

loc 方法是理解的重要事项之一。您可以使用 loc[] 一次选择多个列和多行。或者,使用此 Pandas loc[] 通过向其传递整数位置来选择一部分。最后,将此 loc 方法与方括号一起使用以从大型数据集中选择行。

table = {'name': ['John', 'Mike', 'Suresh', 'Tracy'],
         'Age': [25, 32, 30, 26],
         'Profession': ['Developer', 'Analyst', 'Admin', 'HR'],
         'Salary':[1000000, 1200000, 900000, 1100000]
         }
data = pd.DataFrame(table, index = ['a', 'b', 'c', 'd'])
#print(data)

print('\n---Select b row ---')
print(data.loc['b'])

print('\n---Select c row ---')
print(data.loc['c'])

print('\n---Select b and d rows ---')
print(data.loc[['b', 'd']])

---Select b row ---
name             Mike
Age                32
Profession    Analyst
Salary        1200000
Name: b, dtype: object

---Select c row ---
name          Suresh
Age               30
Profession     Admin
Salary        900000
Name: c, dtype: object

---Select b and d rows ---
    name  Age Profession   Salary
b   Mike   32    Analyst  1200000
d  Tracy   26         HR  1100000

第一条语句 data.loc[:, ['name', 'Sale']] 返回 name 和 Sale 列的所有行。在最后一条语句中,data.loc[1:3, ['name', 'Profession', 'Salary']] 返回索引值 1 到 3 的 name、Profession 和 Salary 列的行。

table = {'name': ['Kane', 'John', 'Suresh', 'Tracy', 'Steve'],
         'Age': [35, 25, 32, 30, 29],
         'Profession': ['Manager', 'Developer', 'Analyst', 'Admin', 'HR'],
         'Sale':[422.19, 22.55, 119.470, 200.190, 44.55],
         'Salary':[12000, 10000, 14000, 11000, 14000]
	    }
data = pd.DataFrame(table)
#print(data)

print('\n---Select name, Sale column ---')
print(data.loc[:, ['name', 'Sale']])

print('\n---Select name, Profession, Salary ---')
print(data.loc[:, ['name', 'Profession', 'Salary']])

print('\n---Select rows from 1 to 2 ---')
print(data.loc[1:3, ['name', 'Profession', 'Salary']])

---Select name, Sale column ---
     name    Sale
0    Kane  422.19
1    John   22.55
2  Suresh  119.47
3   Tracy  200.19
4   Steve   44.55

---Select name, Profession, Salary ---
     name Profession  Salary
0    Kane    Manager   12000
1    John  Developer   10000
2  Suresh    Analyst   14000
3   Tracy      Admin   11000
4   Steve         HR   14000

---Select rows from 1 to 2 ---
     name Profession  Salary
1    John  Developer   10000
2  Suresh    Analyst   14000
3   Tracy      Admin   11000

iloc 示例

与 loc[] 类似,DataFrame 也有 iloc[]。但是,这只接受整数值或索引来返回数据。

table = {'name': ['John', 'Mike', 'Suresh', 'Tracy'],
         'Age': [25, 32, 30, 26],
         'Profession': ['Developer', 'Analyst', 'Admin', 'HR'],
         'Salary':[1000000, 1200000, 900000, 1100000]
         }
data = pd.DataFrame(table, index = ['a', 'b', 'c', 'd'])
#print(data)

print('\n---Select 1st row ---')
print(data.iloc[1])

print('\n---Select 3rd row ---')
print(data.iloc[3])

print('\n---Select 1 and 3 rows ---')
print(data.iloc[[1, 3]])

---Select 1st row ---
name             Mike
Age                32
Profession    Analyst
Salary        1200000
Name: b, dtype: object

---Select 3rd row ---
name            Tracy
Age                26
Profession         HR
Salary        1100000
Name: d, dtype: object

---Select 1 and 3 rows ---
    name  Age Profession   Salary
b   Mike   32    Analyst  1200000
d  Tracy   26         HR  1100000

您可以使用 loc、iloc、at 和 iat 来提取或访问单个值。以下示例将向您展示相同的内容。

table = {'name': ['John', 'Mike', 'Suresh', 'Tracy'],
   import pandas as pd

table = {'name': ['John', 'Mike', 'Suresh', 'Tracy'],
         'Age': [25, 32, 30, 26],
         'Profession': ['Developer', 'Analyst', 'Admin', 'HR'],
         'Salary':[1000000, 1200000, 900000, 1100000]
         }
data = pd.DataFrame(table)
#print(data)

print('\nitem at 0, 0         = ', data.iloc[0][0])

print('item at 0, 1           = ', data.loc[0][1])

print('item at 1, Profession  = ', data.loc[1]['Profession'])

print('item at 2, 3           = ', data.iat[2, 3])

print('item at 0, Salary      = ', data.at[0, 'Salary'])

item at 0, 0           =  John
item at 0, 1           =  25
item at 1, Profession  =  Analyst
item at 2, 3           =  900000
item at 0, Salary      =  1000000

向 Python Pandas DataFrame 添加新列

在此示例中,我们将向您展示如何向现有 DataFrame 添加新列。data['Sale'] = [422.19, 200.190, 44.55] 添加了一个名为 Sale 的全新列。data['Income'] = data['Salary'] + data['basic'] 通过添加 Salary 列和 basic 列中的值来添加新列 Income。

table = {'name': ['Kane', 'Suresh', 'Tracy'],
         'Age': [35, 25, 29],
         'Profession': ['Manager', 'Developer', 'HR'],
         'Salary': [10000, 14000, 11000],
         'basic': [4000, 6000, 4500]
        }

data = pd.DataFrame(table)

# Add New Column
data['Sale'] = [422.19, 200.190, 44.55]
print('\n---After adding New Column ---')
print(data)

# Add New Column using existing
data['Income'] = data['Salary'] + data['basic']
print('\n---Total Salary ---')
print(data)

# Add New Calculated Column
data['New_Salary'] = data['Salary'] + data['Salary'] * 0.25
print('\n---After adding New Column ---')
print(data)

---After adding New Column ---
     name  Age Profession  Salary  basic    Sale
0    Kane   35    Manager   10000   4000  422.19
1  Suresh   25  Developer   14000   6000  200.19
2   Tracy   29         HR   11000   4500   44.55

---Total Salary ---
     name  Age Profession  Salary  basic    Sale  Income
0    Kane   35    Manager   10000   4000  422.19   14000
1  Suresh   25  Developer   14000   6000  200.19   20000
2   Tracy   29         HR   11000   4500   44.55   15500

---After adding New Column ---
     name  Age Profession  Salary  basic    Sale  Income  New_Salary
0    Kane   35    Manager   10000   4000  422.19   14000     12500.0
1  Suresh   25  Developer   14000   6000  200.19   20000     17500.0
2   Tracy   29         HR   11000   4500   44.55   15500     13750.0

从 DataFrame 中删除列

有两种方法可以从 DataFrame 中删除列。您可以使用 del 或 pop 函数。在此示例中,我们将使用这两个函数从 DataFrame 中删除列。

在这里,del(data['basic']) 删除 basic 列(属于 basic 列的完整行)。x = data.pop('Age') 删除或弹出 Age 列,我们也将打印该弹出的列。接下来,我们使用 drop 函数删除 Sale 列。

import pandas as pd

table = {'name': ['Kane', 'Suresh', 'Tracy'],
         'Age': [35, 25, 29],
         'Profession': ['Manager', 'Developer', 'HR'],
         'Salary': [10000, 14000, 11000],
         'basic': [4000, 6000, 4500],
         'Sale': [422.19, 200.190, 44.55]
        }

data = pd.DataFrame(table)
#print(data)

# Delete existing Columns
del(data['basic'])
print('\n---After Deleting basic Column ---')
print(data)

x = data.pop('Age')
print('\n---After Deleting Age Column ---')
print(data)
print('\n---pop Column ---')
print(x)

y = data.drop(columns = 'Sale')
print('\n---After Deleting Sale Column ---')
print(y)

---After Deleting basic Column ---
     name  Age Profession  Salary    Sale
0    Kane   35    Manager   10000  422.19
1  Suresh   25  Developer   14000  200.19
2   Tracy   29         HR   11000   44.55

---After Deleting Age Column ---
     name Profession  Salary    Sale
0    Kane    Manager   10000  422.19
1  Suresh  Developer   14000  200.19
2   Tracy         HR   11000   44.55

---pop Column ---
0    35
1    25
2    29
Name: Age, dtype: int64

---After Deleting Sale Column ---
     name Profession  Salary
0    Kane    Manager   10000
1  Suresh  Developer   14000
2   Tracy         HR   11000

如何删除 DataFrame 行?

在此示例中,我们使用 Pandas drop 函数删除行。

table = {'name': ['Kane', 'Suresh', 'Tracy'],
         'Profession': ['Manager', 'Developer', 'HR'],
         'Salary': [10000, 14000, 11000],
         'Sale': [422.19, 200.190, 44.55]
        }

data = pd.DataFrame(table, index = ['a', 'b', 'c'])
#print(data)

x = data.drop('b')
print('\n---After Deleting b row---')
print(x)

y = data.drop('a')
print('\n---After Deleting a row---')
print(y)

---After Deleting b row---
    name Profession  Salary    Sale
a   Kane    Manager   10000  422.19
c  Tracy         HR   11000   44.55

---After Deleting a row---
     name Profession  Salary    Sale
b  Suresh  Developer   14000  200.19
c   Tracy         HR   11000   44.55

如何重命名 DataFrame 列?

在此编程语言中,使用 Pandas rename 函数重命名一个或多个列。在这里,我们使用此函数将 Profession 列重命名为 Qualification,将 Salary 重命名为 Income。

table = {'name': ['John', 'Mike', 'Suresh', 'Tracy'],
         'Age': [25, 32, 30, 26],
         'Profession': ['Developer', 'Analyst', 'Admin', 'HR'],
         'Salary':[1000000, 1200000, 900000, 1100000]
         }
data = pd.DataFrame(table)

# data = data.rename(columns = {'Profession': 'Qualification'})
data.rename(columns = {'Profession': 'Qualification'}, inplace = True)
print('\n---After Renaming Column ---')
print(data)

data.rename(columns =
                {'Profession': 'Qualification',
                'Salary': 'Income'},
            inplace = True)
print('\n---After Renaming two Column ---')
print(data)

---After Renaming Column ---
     name  Age Qualification   Salary
0    John   25     Developer  1000000
1    Mike   32       Analyst  1200000
2  Suresh   30         Admin   900000
3   Tracy   26            HR  1100000

---After Renaming two Column ---
     name  Age Qualification   Income
0    John   25     Developer  1000000
1    Mike   32       Analyst  1200000
2  Suresh   30         Admin   900000
3   Tracy   26            HR  1100000

head 和 tail

如果您是 R 编程用户,您可能熟悉 head 和 tail 函数。head 函数接受整数值作为参数,并返回给定数量的顶部或第一个记录。

例如,head(5) 返回前 5 条记录。同样,Python pandas DataFrame tail 函数返回底部或最后记录。例如,tail(5) 返回最后 5 条记录或底部 5 条记录。

table = {'name': ['Kane', 'John', 'Mike', 'Suresh', 'Tracy', 'Steve'],
         'Age': [35, 25, 32, 30, 26, 29],
         'Profession': ['Manager', 'Developer', 'Analyst', 'Admin', 'HR', 'HOD'],
         'Sale':[422.19, 22.55, 12.66, 119.470, 200.190, 44.55],
         'Salary':[12000, 10000, 8000, 14000, 11000, 14000]
	    }
data = pd.DataFrame(table)

print('\n---First Five records head()---')
print(data.head())

print('\n---First two records head(2)---')
print(data.head(2))

print('\n---Bottom Five records tail()---')
print(data.tail())

print('\n---last two records tail(2)---')
print(data.tail(2))

---First Five records head()---
     name  Age Profession    Sale  Salary
0    Kane   35    Manager  422.19   12000
1    John   25  Developer   22.55   10000
2    Mike   32    Analyst   12.66    8000
3  Suresh   30      Admin  119.47   14000
4   Tracy   26         HR  200.19   11000

---First two records head(2)---
   name  Age Profession    Sale  Salary
0  Kane   35    Manager  422.19   12000
1  John   25  Developer   22.55   10000

---Bottom Five records tail()---
     name  Age Profession    Sale  Salary
1    John   25  Developer   22.55   10000
2    Mike   32    Analyst   12.66    8000
3  Suresh   30      Admin  119.47   14000
4   Tracy   26         HR  200.19   11000
5   Steve   29        HOD   44.55   14000

---last two records tail(2)---
    name  Age Profession    Sale  Salary
4  Tracy   26         HR  200.19   11000
5  Steve   29        HOD   44.55   14000

转置 DataFrame

DataFrame 具有转置矩阵的内置功能。为此,您必须使用 df.T

print('\n---Transposed ---')
print(data.T)
---Transposed ---
                  0          1        2       3       4      5
name           Kane       John     Mike  Suresh   Tracy  Steve
Age              35         25       32      30      26     29
Profession  Manager  Developer  Analyst   Admin      HR    HOD
Sale         422.19      22.55    12.66  119.47  200.19  44.55
Salary        12000      10000     8000   14000   11000  14000

Python pandas DataFrame groupby

DataFrame groupby 函数类似于 SQL Server 中的 Group By 子句。您可以使用此 Pandas groupby 函数按某些列对数据进行分组,并查找其他列的聚合结果。这是处理实时数据时重要的函数概念之一。

在此示例中,我们创建了一个包含不同列和数据类型的表。然后,我们使用了这个 groupby 函数。第一个语句 data.groupby('Profession').sum() 按 Profession 列对数据框进行分组,并计算 Sales、Salary 和 Age 的总和。

第二个语句 data.groupby(['Profession', 'Age']).sum() 按 Profession 和 Age 列对数据框进行分组,并计算 Sales 和 Salary 的总和。请记住,任何字符串列(无法聚合)都将被连接或组合。

print('\n--- groupby Profession---')
print(data.groupby('Profession').sum())

print('\n--- groupby Profession and Age---')
print(data.groupby(['Profession', 'Age']).sum())

--- groupby Profession---
              name  Age    Sale  Salary
Profession                             
Admin       Suresh   30  119.47   14000
Analyst       Mike   32   12.66    8000
Developer     John   25   22.55   10000
HOD          Steve   29   44.55   14000
HR           Tracy   26  200.19   11000
Manager       Kane   35  422.19   12000

--- groupby Profession and Age---
                  name    Sale  Salary
Profession Age                        
Admin      30   Suresh  119.47   14000
Analyst    32     Mike   12.66    8000
Developer  25     John   22.55   10000
HOD        29    Steve   44.55   14000
HR         26    Tracy  200.19   11000
Manager    35     Kane  422.19   12000

Python pandas DataFrame stack

stack 函数会压缩 DataFrame 对象的一个级别。要使用此 stack 函数,您只需调用 data_to_stack.stack()。在此示例中,我们正在对分组数据(groupby 函数结果)使用此 DataFrame stack 函数以进一步压缩它。

grouped_data1 = data.groupby('Profession').sum()
stacked_data1 = grouped_data1.stack()
print('\n---Stacked groupby Profession---')
print(stacked_data1)

grouped_data2 = data.groupby(['Profession', 'Age']).sum()
stacked_data2 = grouped_data2.stack()
print('\n---Stacked groupby Profession and Age---')
print(stacked_data2)

---Stacked groupby Profession---
Profession        
Admin       name      Suresh
            Age           30
            Sale      119.47
            Salary     14000
Analyst     name        Mike
            Age           32
            Sale       12.66
            Salary      8000
Developer   name        John
            Age           25
            Sale       22.55
            Salary     10000
HOD         name       Steve
            Age           29
            Sale       44.55
            Salary     14000
HR          name       Tracy
            Age           26
            Sale      200.19
            Salary     11000
Manager     name        Kane
            Age           35
            Sale      422.19
            Salary     12000
dtype: object

---Stacked groupby Profession and Age---
Profession  Age        
Admin       30   name      Suresh
                 Sale      119.47
                 Salary     14000
Analyst     32   name        Mike
                 Sale       12.66
                 Salary      8000
Developer   25   name        John
                 Sale       22.55
                 Salary     10000
HOD         29   name       Steve
                 Sale       44.55
                 Salary     14000
HR          26   name       Tracy
                 Sale      200.19
                 Salary     11000
Manager     35   name        Kane
                 Sale      422.19
                 Salary     12000
dtype: object

Python pandas DataFrame unstack

unstack 函数会撤消 stack 函数执行的操作,或者说与 stack 函数相反。此 unstack 函数解压缩堆叠 DataFrame(.stack() 函数)的最后一列。要使用此函数,您可以调用 stacked_data.unstack()

grouped_data1 = data.groupby('Profession').sum()
stacked_data1 = grouped_data1.stack()
unstacked_data1 = stacked_data1.unstack()
# print('\n---Stacked groupby Profession---')
# print(stacked_data1)
print('\n---Unstacked groupby Profession---')
print(unstacked_data1)

grouped_data2 = data.groupby(['Profession', 'Age']).sum()
stacked_data2 = grouped_data2.stack()
unstacked_data2 = stacked_data2.unstack()
# print('\n---Stacked groupby Profession and Age---')
# print(stacked_data2)
print('\n---Unstacked groupby Profession and Age---')
print(unstacked_data2)
---Unstacked groupby Profession---
              name Age    Sale Salary
Profession                           
Admin       Suresh  30  119.47  14000
Analyst       Mike  32   12.66   8000
Developer     John  25   22.55  10000
HOD          Steve  29   44.55  14000
HR           Tracy  26  200.19  11000
Manager       Kane  35  422.19  12000

---Unstacked groupby Profession and Age---
                  name    Sale Salary
Profession Age                       
Admin      30   Suresh  119.47  14000
Analyst    32     Mike   12.66   8000
Developer  25     John   22.55  10000
HOD        29    Steve   44.55  14000
HR         26    Tracy  200.19  11000
Manager    35     Kane  422.19  12000

DataFrame 连接

concat 函数用于组合或连接对象。首先,我们声明了两个大小为 4 * 6 的随机值 df。然后,我们使用 concat 函数进行连接。

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(4, 6))
print(df1)

df2 = pd.DataFrame(np.random.randn(4, 6))
print(df2)

print('\n--- concatenation---')
print(pd.concat([df1, df2]))
          0         1         2         3         4         5
0  0.170510 -0.549890 -0.076595 -1.666645 -0.500168 -0.837365
1 -1.056680 -0.296667 -1.418145 -0.357668 -0.319350  2.131726
2  1.359241  0.913525 -0.590698 -0.460282  1.198779 -0.900188
3  0.550750 -0.186552  0.543404  1.520353  0.288910  0.563674
          0         1         2         3         4         5
0  0.748928 -0.095618 -0.490589  0.950306 -0.786737  0.968456
1 -0.561079  0.204682  1.356939 -1.907207 -0.625462  0.163865
2  0.391494  0.881150  0.871912 -0.448490  0.589685  0.271900
3  0.179141 -0.589593 -0.335848 -0.348342  0.516758  0.691327

--- concatenation---
          0         1         2         3         4         5
0  0.170510 -0.549890 -0.076595 -1.666645 -0.500168 -0.837365
1 -1.056680 -0.296667 -1.418145 -0.357668 -0.319350  2.131726
2  1.359241  0.913525 -0.590698 -0.460282  1.198779 -0.900188
3  0.550750 -0.186552  0.543404  1.520353  0.288910  0.563674
0  0.748928 -0.095618 -0.490589  0.950306 -0.786737  0.968456
1 -0.561079  0.204682  1.356939 -1.907207 -0.625462  0.163865
2  0.391494  0.881150  0.871912 -0.448490  0.589685  0.271900
3  0.179141 -0.589593 -0.335848 -0.348342  0.516758  0.691327

在上面的示例中,我们正在连接两个相同大小的 df 对象。但是,您可以使用此 Python Pandas DataFrame concat 函数连接或组合两个以上不同大小的对象。

为此,我们使用了三个不同大小的随机生成数字的数据框。然后,我们使用该函数连接这三个对象。

dfA = pd.DataFrame(np.random.randn(4, 6))
print(dfA)

dfB = pd.DataFrame(np.random.randn(4, 5))
print(dfB)

dfC = pd.DataFrame(np.random.randn(3, 4))
print(dfC)

print('\n-----concatenation-----')
print(pd.concat([dfA, dfB, dfC]))
          0         1         2         3         4         5
0 -0.071220  0.286829  0.726730 -1.046570  1.114306 -0.622870
1 -0.137455 -1.237104 -2.567032 -0.773737  0.446680  1.241036
2  0.417368 -0.544948 -1.368237 -0.409373 -1.757377  1.481192
3 -0.958583  0.116646  0.491579  1.018028  0.591651  1.072710
          0         1         2         3         4
0  2.525100 -0.172472 -2.364648 -2.312990  0.264522
1  0.041258  0.688158  1.192806  1.590377 -0.549352
2  0.723508 -1.246208 -0.497221  0.174042 -0.634088
3 -0.394750  1.186304  0.575888 -1.201602  0.851508
          0         1         2         3
0  0.038201 -0.987624 -1.347281  0.968429
1 -0.268102 -0.981864  0.378091  0.193392
2  2.287503  0.834575 -0.774165  1.244232

-----concatenation-----
          0         1         2         3         4         5
0 -0.071220  0.286829  0.726730 -1.046570  1.114306 -0.622870
1 -0.137455 -1.237104 -2.567032 -0.773737  0.446680  1.241036
2  0.417368 -0.544948 -1.368237 -0.409373 -1.757377  1.481192
3 -0.958583  0.116646  0.491579  1.018028  0.591651  1.072710
0  2.525100 -0.172472 -2.364648 -2.312990  0.264522       NaN
1  0.041258  0.688158  1.192806  1.590377 -0.549352       NaN
2  0.723508 -1.246208 -0.497221  0.174042 -0.634088       NaN
3 -0.394750  1.186304  0.575888 -1.201602  0.851508       NaN
0  0.038201 -0.987624 -1.347281  0.968429       NaN       NaN
1 -0.268102 -0.981864  0.378091  0.193392       NaN       NaN
2  2.287503  0.834575 -0.774165  1.244232       NaN       NaN

数学运算

在此示例中,我们使用了一些 DataFrame 数学函数。为了进行此数学运算演示,我们正在查找每个列和每个行的均值和中位数。要获取每行的均值或中位数,您必须在函数中放置整数 1。

table = {'name': ['Kane', 'John', 'Mike', 'Suresh', 'Tracy'],
         'Age': [35, 25, 32, 30, 26],
         'Profession': ['Manager', 'Developer', 'Analyst', 'Admin', 'HR'],
         'Sale':[422.19, 22.55, 12.66, 119.470, 200.190],
         'Salary':[12000, 10000, 8000, 14000, 11000]
	    }
data = pd.DataFrame(table)
#print(data)

print('\n--- Mean of Columns---')
print(data.mean())

print('\n---Mean of Rows---')
print(data.mean(1))

print('\n--- Median of Columns---')
print(data.median())

print('\n--- Median of Rows---')
print(data.median(1))

--- Mean of Columns---
Age          29.600
Sale        155.412
Salary    11000.000
dtype: float64

--- Mean of Rows---
0    4152.396667
1    3349.183333
2    2681.553333
3    4716.490000
4    3742.063333
dtype: float64

--- Median of Columns---
Age          30.00
Sale        119.47
Salary    11000.00
dtype: float64

--- Median of Rows---
0    422.19
1     25.00
2     32.00
3    119.47
4    200.19
dtype: float64

我们正在计算每个列的行总和、每行中所有列的总和。同样,使用 sum()、min() 和 max() 函数计算列中的最小值、每个列中的最大值以及每行中的最大值。

table = {'name': ['Kane', 'John', 'Mike', 'Suresh', 'Tracy'],
         'Age': [35, 25, 32, 30, 26],
         'Profession': ['Manager', 'Developer', 'Analyst', 'Admin', 'HR'],
         'Sale':[422.19, 22.55, 12.66, 119.470, 200.190],
         'Salary':[12000, 10000, 8000, 14000, 11000]
	    }
data = pd.DataFrame(table)
#print(data)

print('\n--- sum of Columns---')
print(data.sum())

print('\n--- sum of Rows---')
print(data.sum(1))

print('\n--- Minimum of Columns---')
print(data.min())

print('\n--- Maximum of Columns---')
print(data.max())

print('\n--- Maximum of Rows---')
print(data.max(1))

您可以看到对象的 dtype 和 dtype float64。


--- sum of Columns---
name                 KaneJohnMikeSureshTracy
Age                                      148
Profession    ManagerDeveloperAnalystAdminHR
Sale                                  777.06
Salary                                 55000
dtype: object

--- sum of Rows---
0    12457.19
1    10047.55
2     8044.66
3    14149.47
4    11226.19
dtype: float64

--- Minimum of Columns---
name           John
Age              25
Profession    Admin
Sale          12.66
Salary         8000
dtype: object

--- Maximum of Columns---
name            Tracy
Age                35
Profession    Manager
Sale           422.19
Salary          14000
dtype: object

--- Maximum of Rows---
0    12000.0
1    10000.0
2     8000.0
3    14000.0
4    11000.0
dtype: float64

DataFrame 上的算术运算

我们将执行算术运算

table = {'Age': [25, 32, 30],
         'Sale':[422.19, 119.470, 200.190],
         'Salary':[12000, 14000, 11000]
	    }
data = pd.DataFrame(table)
print(data)

print('\n---Add 20 ---')
print(data + 20)

print('\n---Subtract 10 ---')
print(data - 10)

print('\n---Multiply by 2---')
print(data * 2)
   Age    Sale  Salary
0   25  422.19   12000
1   32  119.47   14000
2   30  200.19   11000

---Add 20 ---
   Age    Sale  Salary
0   45  442.19   12020
1   52  139.47   14020
2   50  220.19   11020

---Subtract 10 ---
   Age    Sale  Salary
0   15  412.19   11990
1   22  109.47   13990
2   20  190.19   10990

---Multiply by 2---
   Age    Sale  Salary
0   50  844.38   24000
1   64  238.94   28000
2   60  400.38   22000

Python Pandas DataFrame 空值

isnull 检查并返回 True,如果数据框中的值为 Null;否则,返回 False。notnull 函数返回 True,如果值不为 Null。否则,将返回 False。

import pandas as pd
import numpy as np

table = {'name': ['Kane', 'Suresh', np.nan],
         'Profession': ['Manager', np.nan, 'HR'],
         'Salary': [np.nan, 14000, 11000],
         'Sale': [422.19, np.nan, 44.55]
        }

data = pd.DataFrame(table)

print('\n---Checking Nulls ---')
print(data.isnull())

print('\n---Checking Not Nulls ---')
print(data.notnull())

---Checking Nulls ---
    name  Profession  Salary   Sale
0  False       False    True  False
1  False        True   False   True
2   True       False   False  False

---Checking Not Nulls ---
    name  Profession  Salary   Sale
0   True        True   False   True
1   True       False    True  False
2  False        True    True   True

替换 DataFrame 中的空值

我们还可以用重要的数字替换这些 Null 值。因此,要替换空值,请使用 DataFrame fillna 或 replace 函数。

table = {'Age': [20, 35, np.nan],
         'Salary': [np.nan, 14000, 11000],
         'Sale': [422.19, np.nan, 44.55]
        }

data = pd.DataFrame(table)

print('\n---Fill Missing Values ---')
print(data.fillna(30))

print('\n---Replace Missing Values ---')
print(data.replace({np.nan:66}))

---Fill Missing Values ---
    Age   Salary    Sale
0  20.0     30.0  422.19
1  35.0  14000.0   30.00
2  30.0  11000.0   44.55

---Replace Missing Values ---
    Age   Salary    Sale
0  20.0     66.0  422.19
1  35.0  14000.0   66.00
2  66.0  11000.0   44.55

将 DataFrame 保存到 CSV 和文本文件

要将数据从 DataFrame 加载到 CSV 文件或文本文件,您必须使用 to_csv 函数。

import pandas as pd

table = {'name': ['Kane', 'John', 'Mike', 'Suresh', 'Tracy'],
         'Age': [35, 25, 32, 30, 26],
         'Profession': ['Manager', 'HR', 'Analyst', 'Manager', 'HR'],
         'Sale':[422.19, 22.55, 12.66, 119.470, 200.190],
         'Salary':[12000, 10000, 8000, 14000, 11000]
	    }
data = pd.DataFrame(table)
print(data)

# load to text file
data.to_csv('user_info.txt') 

# load  to csv file with comma separator
data.to_csv('user_info.csv')

# load data to csv file with Tab separator
data.to_csv('user_info_new.csv', sep = '\t')
Python Pandas Save DataFrame to CSV and Text File

DataFrame pivot

pivot 函数对于透视现有 DataFrame 非常有用。

print('\n--- After Pivot---')
data2 = data.pivot(index = 'name', columns = 'Profession', values = 'Salary')
print(data2)

print('\n--- After Pivot---')
data3 = data.pivot(index = 'name', columns = 'Profession')
print(data3)
--- After Pivot---
Profession  Analyst       HR  Manager
name                                 
John            NaN  10000.0      NaN
Kane            NaN      NaN  12000.0
Mike         8000.0      NaN      NaN
Suresh          NaN      NaN  14000.0
Tracy           NaN  11000.0      NaN

--- After Pivot---
               Age                  Sale  ...          Salary                  
Profession Analyst    HR Manager Analyst  ... Manager Analyst       HR  Manager
name                                      ...                                  
John           NaN  25.0     NaN     NaN  ...     NaN     NaN  10000.0      NaN
Kane           NaN   NaN    35.0     NaN  ...  422.19     NaN      NaN  12000.0
Mike          32.0   NaN     NaN   12.66  ...     NaN  8000.0      NaN      NaN
Suresh         NaN   NaN    30.0     NaN  ...  119.47     NaN      NaN  14000.0
Tracy          NaN  26.0     NaN     NaN  ...     NaN     NaN  11000.0      NaN

[5 rows x 9 columns]

迭代 DataFrame 行

使用 iteritems、iterrows 和 itertuple 中的任何一个函数迭代行并返回每行。有关更多信息,请参阅 pandas 模块。

print('\n---Iterating Rows---')
for rows, columns in data.iterrows():
    print(rows, columns)
    print()

---Iterating Rows---
0 name             Kane
Age                35
Profession    Manager
Sale           422.19
Salary          12000
Name: 0, dtype: object

1 name            John
Age               25
Profession        HR
Sale          119.47
Salary         14000
Name: 1, dtype: object

2 name             Mike
Age                32
Profession    Analyst
Sale           200.19
Salary          11000
Name: 2, dtype: object