Pandas DataFrame详解
Pandas DataFrame是二维大小可变的、可能是异构的表格数据结构,带有标记的轴(行和列)。数据帧是一个二维数据结构,i.e。,数据以表格的方式按行和列对齐。Pandas DataFrame由三个主要组件组成:数据、行和列。
我们将对所有这些基本操作有一个简单的了解,这些操作可以在Pandas DataFrame上执行:
- 创建一个DataFrame
- 处理行和列
- 索引和选择数据
- 处理缺失的数据
- 遍历行和列
创建Pandas DataFrame
在现实世界中,Pandas DataFrame将通过从现有存储中加载数据集来创建,存储可以是SQL数据库、CSV文件和Excel文件。Pandas DataFrame可以从列表、字典和字典列表等创建。数据框架可以通过不同的方式创建,以下是创建数据框架的几种方式:
使用列表创建数据框架:可以使用单个列表或列表的列表创建数据框架。
# import pandas as pd
import pandas as pd
# list of strings
lst = ['Geeks', 'For', 'Geeks', 'is',
'portal', 'for', 'Geeks']
# Calling DataFrame constructor on list
df = pd.DataFrame(lst)
print(df)
输出:
从ndarray/lists的字典中创建DataFrame:要从narray/list的字典中创建DataFrame,所有narray的长度必须相同。如果传递了index,那么长度索引应该等于数组的长度。如果没有传递索引,那么默认情况下,index将是range(n),其中n是数组长度。
# Python code demonstrate creating
# DataFrame from dict narray / lists
# By default addresses.
import pandas as pd
# intialise data of lists.
data = {'Name':['Tom', 'nick', 'krish', 'jack'],
'Age':[20, 21, 19, 18]}
# Create DataFrame
df = pd.DataFrame(data)
# Print the output.
print(df)
输出:
处理行和列
数据帧是一个二维数据结构,i.e。,数据以表格的方式按行和列对齐。我们可以对行/列执行基本操作,如选择、删除、添加和重命名。
列选择:
为了在Pandas DataFrame中选择一个列,我们可以通过调用列的名称来访问这些列。
# Import pandas package
import pandas as pd
# Define a dictionary containing employee data
data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Delhi', 'Kanpur', 'Allahabad', 'Kannauj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
# Convert the dictionary into DataFrame
df = pd.DataFrame(data)
# select two columns
print(df[['Name', 'Qualification']])
输出:
行选择:
Pandas提供了一种从数据帧检索行的独特方法。DataFrame.loc[]方法用于从Pandas DataFrame中检索行。还可以通过将整数位置传递给iloc[]函数来选择行。
注意:我们将在下面的例子中使用nba.csv文件。
# importing pandas package
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving row by loc method
first = data.loc["Avery Bradley"]
second = data.loc["R.J. Hunter"]
print(first, "\n\n\n", second)
输出:
如输出图像所示,返回了两个系列,因为两个时间都只有一个参数。
索引和选择数据
pandas中的索引意味着只需要从DataFrame中选择特定的数据行和列。索引可能意味着选择所有行和一些列,一些行和所有列,或者每个行和列中的一些。索引也可以称为子集选择。
使用索引操作符[]对数据帧进行索引:
索引操作符用于引用对象后面的方括号。.loc和.iloc索引器也使用索引操作符进行选择。在这个索引操作符中引用df[]。
选择单个列
为了选择一个列,我们只需将列的名称放在括号中
# importing pandas package
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving columns by indexing operator
first = data["Age"]
print(first)
输出:
这个函数根据行和列的标签选择数据。df.loc索引器选择数据的方式与索引操作符不同。它可以选择行或列的子集。它还可以同时选择行和列的子集。
选择单行
为了使用.loc[]选择单行,我们在.loc函数中放入了一个单行标签。
# importing pandas package
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving row by loc method
first = data.loc["Avery Bradley"]
second = data.loc["R.J. Hunter"]
print(first, "\n\n\n", second)
输出:
如输出图像所示,返回了两个系列,因为两个时间都只有一个参数。
索引DataFrame使用.iloc[]:
这个函数允许我们按位置检索行和列。为了做到这一点,我们需要指定我们想要的行的位置,以及我们想要的列的位置。df.iloc索引器非常类似于df.loc,但只使用整数位置来进行选择。
选择单行
为了使用.iloc[]选择单个行,可以将单个整数传递给.iloc[]函数。
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving rows by iloc method
row2 = data.iloc[3]
print(row2)
输出:
处理缺失的数据
当一个或多个项目或整个单元没有提供信息时,可能会出现数据缺失。在现实生活中,数据缺失是一个非常大的问题。丢失的数据也可以称为NA(不可用)值在Pandas。
使用isnull()和notnull()检查缺失的值:
为了检查Pandas DataFrame中缺失的值,我们使用了一个函数isnull()和notnull()。这两个函数都有助于检查值是否为NaN。这些函数还可以在Pandas Series中使用,以便在系列中找到空值。
# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
'Second Score': [30, 45, 56, np.nan],
'Third Score':[np.nan, 40, 80, 98]}
# creating a dataframe from list
df = pd.DataFrame(dict)
# using isnull() function
df.isnull()
输出:
使用fillna(), replace()和interpolate()来填充缺失的值:
为了填充数据集中的空值,我们使用fillna(), replace()和interpolate()函数,这些函数用它们自己的值替换NaN值。所有这些函数都有助于在DataFrame的数据集中填充空值。Interpolate()函数主要用于填充数据帧中的NA值,但它使用各种插值技术来填充缺失的值,而不是硬编码值。
# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
'Second Score': [30, 45, 56, np.nan],
'Third Score':[np.nan, 40, 80, 98]}
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
# filling missing value using fillna()
df.fillna(0)
输出:
使用dropna()删除缺失值:
为了从数据框架中删除空值,我们使用dropna()函数,该函数以不同的方式删除具有空值的数据集的行/列。
# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
'Second Score': [30, np.nan, 45, 56],
'Third Score':[52, 40, 80, 98],
'Fourth Score':[np.nan, np.nan, np.nan, 65]}
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
df
现在我们删除至少有一个Nan值(Null值)的行
# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
'Second Score': [30, np.nan, 45, 56],
'Third Score':[52, 40, 80, 98],
'Fourth Score':[np.nan, np.nan, np.nan, 65]}
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
# using dropna() function
df.dropna()
输出:
遍历行和列
迭代是一个通用术语,指的是一个接一个地获取某项内容。Pandas DataFrame由行和列组成,所以为了遍历数据框架,我们必须像字典一样遍历数据框架。
遍历行:
为了对行进行迭代,可以使用三个函数iteritem()、iterrows()和itertuples()。这三个函数将有助于对行进行迭代。
# importing pandas as pd
import pandas as pd
# dictionary of lists
dict = {'name':["aparna", "pankaj", "sudhir", "Geeku"],
'degree': ["MBA", "BCA", "M.Tech", "MBA"],
'score':[90, 40, 80, 98]}
# creating a dataframe from a dictionary
df = pd.DataFrame(dict)
print(df)
现在我们应用iterrows()函数来获取行中的每个元素。
# importing pandas as pd
import pandas as pd
# dictionary of lists
dict = {'name':["aparna", "pankaj", "sudhir", "Geeku"],
'degree': ["MBA", "BCA", "M.Tech", "MBA"],
'score':[90, 40, 80, 98]}
# creating a dataframe from a dictionary
df = pd.DataFrame(dict)
# iterating over rows using iterrows() function
for i, j in df.iterrows():
print(i, j)
print()
输出:
遍历列:
为了遍历列,我们需要创建一个数据框架列列表,然后遍历该列表以提取数据框架列。
# importing pandas as pd
import pandas as pd
# dictionary of lists
dict = {'name':["aparna", "pankaj", "sudhir", "Geeku"],
'degree': ["MBA", "BCA", "M.Tech", "MBA"],
'score':[90, 40, 80, 98]}
# creating a dataframe from a dictionary
df = pd.DataFrame(dict)
print(df)
现在我们遍历列,为了遍历列,我们首先创建一个dataframe列的列表,然后遍历list。
# creating a list of dataframe columns
columns = list(df)
for i in columns:
# printing the third element of the column
print (df[i][2])
输出:
DataFrame方法:
Function | Description |
---|---|
index () | 方法返回DataFrame的索引(行标签) |
insert () | 方法将列插入DataFrame中 |
add() | 方法返回dataframe和其他元素的相加(二进制操作符相加)。 |
sub() | 方法返回数据框架和其他元素(二元运算符子)的减法。 |
mul() | 方法返回数据帧与其他元素(二元运算符mul)的乘法。 |
div() | 方法返回数据框架和其他元素的浮点除法(二元运算符truediv)。 |
unique() | 方法提取数据框架中的唯一值 |
nunique () | 方法返回数据框架中唯一值的计数 |
value_counts () | 方法计算每个惟一值在Series中出现的次数 |
columns() | 方法返回DataFrame的列标签 |
axes() | 方法返回一个表示DataFrame轴的列表 |
isnull () | 方法创建一个布尔序列,用于提取具有空值的行 |
notnull () | 方法创建一个布尔序列,用于提取具有非空值的行 |
between() | 方法提取列值处于预定义范围之间的行 |
isin() | 方法从预定义集合中存在列值的DataFrame中提取行 |
dtypes () | 方法返回具有每个列的数据类型的Series。结果的索引是原始DataFrame的列 |
astype () | 方法转换Series中的数据类型 |
values() | 方法返回DataFrame i.e的Numpy表示形式。只有DataFrame中的值会被返回,轴标签会被移除 |
sort_values()- Set1, Set2 | 方法按传递的列的升序或降序对数据帧进行排序 |
sort_index () | 方法根据数据帧的索引位置或标签(而不是值)对数据帧中的值进行排序,但有时数据帧由两个或多个数据帧组成,因此可以使用此方法更改以后的索引 |
loc[] | 方法根据索引标签检索行 |
iloc[] | 方法根据索引位置检索行 |
ix[] | 方法根据索引标签或索引位置检索DataFrame行。这个方法结合了.loc[]和.iloc[]方法的最佳特性 |
rename() | 方法在DataFrame上调用,以更改索引标签或列名 |
columns() | 方法是更改列名的替代属性 |
drop() | 方法用于从DataFrame中删除行或列 |
pop() | 方法用于从DataFrame中删除行或列 |
sample() | 方法从DataFrame中取出行或列的随机样本 |
nsmallest () | 方法提取列中值最小的行 |
nlargest () | 方法提取列中值最大的行 |
shape() | 方法返回表示DataFrame维度的元组 |
ndim() | 方法返回一个“int”,表示轴/数组维度的数量。 如果Series返回1,否则如果DataFrame返回2 |
dropna () | 方法允许用户以不同的方式分析和删除具有Null值的行/列 |
fillna () | 方法管理并让用户用自己的值替换NaN值 |
rank() | 使用此方法可以对Series中的值进行排序 |
query() | 方法是从DataFrame中提取子集的另一种基于字符串的语法 |
copy() | 方法创建pandas对象的独立副本 |
copy() | 方法创建布尔序列,并使用它提取具有重复值的行 |
drop_duplicates () | 方法是标识重复行并通过过滤删除它们的替代选项 |
set_index () | 方法使用一个或多个现有列设置DataFrame索引(行标签) |
reset_index () | 方法重置数据帧的索引。此方法将从0到数据长度的整数列表设置为索引 |
where() | 方法用于检查数据帧中的一个或多个条件,并相应地返回结果。默认情况下,不满足条件的行填充NaN值 |