📅  最后修改于: 2020-10-29 05:18:38             🧑  作者: Mango
以下列出了最常见的Python Pandas面试问题和答案。
Pandas被定义为一个开放源代码库,可在Python中提供高性能的数据处理。Pandas 的名称源自“面板数据”一词,这表示来自多维数据的计量经济学。它可以用于Python的数据分析,并且由Wes McKinney在2008年开发。它可以执行五个重要的步骤,这些步骤无论数据的来源如何,都必须处理和分析数据,即加载,操作,准备,建模,和分析。
Pandas 提供了两种数据结构,Pandas 库,系列和数据框架均支持它们。这两个数据结构都建立在NumPy之上。
系列是Pandas 中的一维数据结构,而数据框是Pandas 中的二维数据结构。
系列定义为能够存储各种数据类型的一维数组。系列的行标签称为索引。通过使用“系列”方法,我们可以轻松地将列表,元组和字典转换为系列。系列不能包含多个列。
Pandas std()被定义为用于计算给定数字集,DataFrame,列和行的标准偏差的函数。
Series.std(轴=无,skipna =无,级别=无,ddof = 1,numeric_only =无,**扭曲)
DataFrame是Pandas 的一种广泛使用的数据结构,可与带有标记轴(行和列)的二维数组一起使用。DataFrame被定义为存储数据的标准方式,并具有两个不同的索引,即行索引和列索引。它包含以下属性:
Pandas 库的主要功能如下:
重新索引用于通过可选的填充逻辑使DataFrame符合新索引。它将NA / NaN放置在先前索引中不存在值的位置。除非产生与当前索引等效的新索引,否则它将返回一个新对象,并且copy的值变为False。它用于更改DataFrame的行和列的索引。
Scatter_matrix
我们可以使用以下方式创建一个DataFrame:
示例1:使用列表创建一个DataFrame:
import pandas as pd
# a list of strings
a = ['Python', 'Pandas']
# Calling DataFrame constructor on list
info = pd.DataFrame(a)
print(info)
输出:
0
0 Python
1 Pandas
示例2:根据ndarrays的字典创建一个DataFrame:
import pandas as pd
info = {'ID' :[101, 102, 103],'Department' :['B.Sc','B.Tech','M.Tech',]}
info = pd.DataFrame(info)
print (info)
输出:
ID Department
0 101 B.Sc
1 102 B.Tech
2 103 M.Tech
分类数据被定义为与统计中的分类变量相对应的Pandas数据类型。类别变量通常用于获取有限且通常为固定数量的可能值。例如:性别,国家所属,血型,社会阶层,观察时间或通过李克特量表进行的评分。分类数据的所有值都在类别或np.nan中。
在以下情况下,此数据类型很有用:
系列定义为能够存储各种数据类型的一维数组。
我们可以从Dictionary创建一个Pandas系列:
根据字典创建系列:
我们也可以根据字典创建系列。如果将字典对象作为输入传递而未指定索引,则按排序顺序获取字典键以构造索引。
如果传递了索引,则将从字典中提取与索引中特定标签相对应的值。
import pandas as pd
import numpy as np
info = {'x' : 0., 'y' : 1., 'z' : 2.}
a = pd.Series(info)
print (a)
输出:
x 0.0
y 1.0
z 2.0
dtype: float64
我们可以使用以下语法创建系列的副本:
pandas.Series.copy Series.copy(deep = True)
上面的语句构成了一个深层副本,其中包含数据和索引的副本。如果将deep的值设置为False,它将既不会复制索引也不会复制数据。
注意:如果我们设置deep = True,将复制数据,并且不会递归复制实际的Python对象,仅复制对对象的引用。
DataFrame是广泛使用的Pandas 数据结构,可与带有标记轴(行和列)的二维数组一起使用。DataFrame被定义为存储数据的标准方式,并具有两个不同的索引,即行索引和列索引。
创建一个空的DataFrame:
以下代码显示了如何在Pandas中创建一个空的DataFrame:
# importing the pandas library
import pandas as pd
info = pd.DataFrame()
print (info)
输出:
Empty DataFrame
Columns: []
Index: []
我们可以将任何新列添加到现有DataFrame中。以下代码演示了如何将任何新列添加到现有DataFrame中:
# importing the pandas library
import pandas as pd
info = {'one' : pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e']),
'two' : pd.Series([1, 2, 3, 4, 5, 6], index=['a', 'b', 'c', 'd', 'e', 'f'])}
info = pd.DataFrame(info)
# Add a new column to an existing DataFrame object
print ("Add new column by passing series")
info['three']=pd.Series([20,40,60],index=['a','b','c'])
print (info)
print ("Add new column using existing DataFrame columns")
info['four']=info['one']+info['three']
print (info)
输出:
Add new column by passing series
one two three
a 1.0 1 20.0
b 2.0 2 40.0
c 3.0 3 60.0
d 4.0 4 NaN
e 5.0 5 NaN
f NaN 6 NaN
Add new column using existing DataFrame columns
one two three four
a 1.0 1 20.0 21.0
b 2.0 2 40.0 42.0
c 3.0 3 60.0 63.0
d 4.0 4 NaN NaN
e 5.0 5 NaN NaN
f NaN 6 NaN NaN
向数据框添加索引
如果您创建DataFrame,则Pandas 可以将输入添加到index参数。它将确保您具有所需的索引。如果未指定输入,则默认情况下,DataFrame包含一个数值索引,该索引从0开始并在DataFrame的最后一行结束。
向数据框添加行
我们可以使用.loc,iloc和ix在DataFrame中插入行。
将列添加到DataFrame
如果要将列添加到DataFrame,则可以使用loc或iloc轻松地执行与将索引添加到DataFrame相同的过程。
从您的DataFrame中删除索引
如果要从DataFrame中删除索引,则必须执行以下操作:
重置DataFrame的索引。
执行del df.index.name删除索引名称。
通过重置索引来删除重复的索引值,然后从索引列中删除重复的值。
删除一行索引。
从DataFrame删除列
您可以使用drop()方法从DataFrame中删除列。
传递给drop()方法的axis参数如果表示行则为0,如果删除列则为1。
您可以就地传递参数并将其设置为True,以在不重新分配DataFrame的情况下删除列。
您还可以使用drop_duplicates()方法从列中删除重复的值。
从数据框中删除一行
通过使用df.drop_duplicates(),我们可以从DataFrame中删除重复的行。
您可以使用drop()方法指定要从DataFrame中删除的行的索引。
您可以使用.rename方法为DataFrame的列或索引值赋予不同的值。
您可以通过将for循环与DataFrame上的iterrows()调用结合使用来遍历DataFrame的行。
我们可以使用isin()方法从p1中删除p2中存在的项目。
import pandas as pd
p1 = pd.Series([2, 4, 6, 8, 10])
p2 = pd.Series([8, 10, 12, 14, 16])
p1[~p1.isin(p2)]
解
0 2
1 4
2 6
dtype: int64
通过下面的示例,我们得到p1和p2都不相同的所有项目:
import pandas as pd
import numpy as np
p1 = pd.Series([2, 4, 6, 8, 10])
p2 = pd.Series([8, 10, 12, 14, 16])
p1[~p1.isin(p2)]
p_u = pd.Series(np.union1d(p1, p2)) # union
p_i = pd.Series(np.intersect1d(p1, p2)) # intersect
p_u[~p_u.isin(p_i)]
输出:
0 2
1 4
2 6
5 12
6 14
7 16
dtype: int64
我们可以计算p的最小值,第25个百分点,中位数,第75个和最大值,如下例所示:
import pandas as pd
import numpy as np
p = pd.Series(np.random.normal(14, 6, 22))
state = np.random.RandomState(120)
p = pd.Series(state.normal(14, 6, 22))
np.percentile(p, q=[0, 25, 50, 75, 100])
输出:
array([ 4.61498692, 12.15572753, 14.67780756, 17.58054104, 33.24975515])
我们可以计算每个唯一值p的频率计数,如下例所示:
import pandas as pd
import numpy as np
p= pd.Series(np.take(list('pqrstu'), np.random.randint(6, size=17)))
p = pd.Series(np.take(list('pqrstu'), np.random.randint(6, size=17)))
p.value_counts()
输出:
s 4
r 4
q 3
p 3
u 3
我们可以将序列p整形为具有6行2列的数据框,如下例所示:
import pandas as pd
import numpy as np
p = pd.Series(np.random.randint(1, 7, 35))
# Input
p = pd.Series(np.random.randint(1, 7, 35))
info = pd.DataFrame(p.values.reshape(7,5))
print(info)
输出:
0 1 2 3 4
0 3 2 5 5 1
1 3 2 5 5 5
2 1 3 1 2 6
3 1 1 1 2 2
4 3 5 3 3 3
5 2 5 3 6 4
6 3 6 6 6 5
Pandas Series.to_frame()函数用于将系列对象转换为DataFrame。
Series.to_frame(name=None)
名称:指对象。其默认值为无。如果具有一个值,那么将使用传递的名称代替系列名称。
s = pd.Series(["a", "b", "c"],
name="vals")
s.to_frame()
输出:
vals
0 a
1 b
2 c
数值Python (Numpy)被定义为Python软件包,用于执行多维和一维数组元素的各种数值计算和处理。使用Numpy数组的计算比普通的Python数组快。
为了执行一些高级数学函数,我们可以将Pandas DataFrame转换为numpy数组。它使用DataFrame.to_numpy()函数。
DataFrame.to_numpy()函数应用于返回numpy ndarray的DataFrame。
DataFrame.to_numpy(dtype=None, copy=False)
我们可以使用to_excel()函数将DataFrame导出到excel文件。
要将单个对象写入excel文件,我们必须指定目标文件名。如果要写入多个工作表,则需要创建一个具有目标文件名的ExcelWriter对象,还需要在必须写入的文件中指定工作表。
我们可以通过以下几种有效地在DataFrame中执行排序:
按标签
可以使用sort_index()方法对DataFrame进行排序。可以通过传递轴参数和排序顺序来完成。默认情况下,按升序对行标签进行排序。
按实际值
这是另一种可以在DataFrame中执行排序的方法。与索引排序类似,sort_values()是一种用于对值进行排序的方法。
它还提供了一项功能,我们可以在其中指定要对值进行排序的DataFrame的列名。通过传递“ by”参数来完成。
时间序列数据被定义为信息的重要来源,该信息提供了可用于各种业务的策略。从传统的金融行业到教育行业,它包含许多有关时间的细节。
时间序列预测是一种处理时间序列数据的机器学习模型,用于通过时间序列建模预测未来值。
偏移量指定一组符合DateOffset的日期。我们可以创建DateOffsets将日期向前移动到有效日期。
时间段表示时间跨度,例如天,年,季度或月等。它被定义为允许我们将频率转换为时间段的类。
以下代码演示了如何将字符串转换为日期:
fromdatetime import datetime
# Define dates as the strings
dmy_str1 = 'Wednesday, July 14, 2018'
dmy_str2 = '14/7/17'
dmy_str3 = '14-07-2017'
# Define dates as the datetime objects
dmy_dt1 = datetime.strptime(date_str1, '%A, %B %d, %Y')
dmy_dt2 = datetime.strptime(date_str2, '%m/%d/%y')
dmy_dt3 = datetime.strptime(date_str3, '%m-%d-%Y')
#Print the converted dates
print(dmy_dt1)
print(dmy_dt2)
print(dmy_dt3)
输出:
2017-07-14 00:00:00
2017-07-14 00:00:00
2018-07-14 00:00:00
数据聚合的主要任务是将聚合应用于一个或多个列。它使用以下内容:
Pandas 索引被定义为从DataFrame中选择特定行和列数据的重要工具。它的任务是组织数据并提供对数据的快速访问。也可以称为子集选择。
多重索引被定义为必不可少的索引,因为它处理数据分析和操作,尤其是处理高维数据时。它还使我们能够在Series和DataFrame等较低维度的数据结构中存储和处理任意数量的维度的数据。
重新索引用于更改DataFrame的行和列的索引。我们可以使用reindex()方法为单行或多行重新索引。如果新索引中的默认值不在DataFrame中,则分配为NaN。
DataFrame.reindex(labels = None,index = None,column = None,axis = None,method = None,copy = True,level = None,fill_value = nan,limit = None,公差= None)
我们可以在制作数据框时设置索引列。但是有时,一个数据帧是由两个或多个数据帧组成的,然后可以使用此方法更改索引。
DataFrame的Reset index用于通过使用’reset_index’命令来重置索引。如果DataFrame具有MultiIndex,则此方法可以删除一个或多个级别。
在Pandas中,DataFrame有多种有用的数据操作,如下所示:
我们可以通过传递行和列的名称来选择DataFrame的任何行和列。当您从DataFrame中选择它时,它将变为一维并被视为Series。
我们可以通过在DataFrame中提供一些布尔表达式来过滤数据。
当没有数据提供给项目时,将出现Null值。各个列可能不包含任何值,通常以NaN表示。
在Pandas 中,groupby()函数使我们可以通过在实际数据集上利用它们来重新排列数据。它的主要任务是将数据分成不同的组。这些组基于一些标准进行分类。可以从任何轴划分对象。
DataFrame.groupby(by = None,axis = 0,level = None,as_index = True,sort = True,group_keys = True,squeeze = False,** kwargs)