DataFrame是python中Pandas库中的一种数据结构,类似excel,是一种二维表。DataFrame的单元格可以存放数值,字符串等类型数据。python在处理excel数据时通常都会用DataFrame来读。
%%time
# 读数据
import pandas as pd
df = pd.read_excel('2019-2.xlsx',sheet_name=None)
%%time可以计算代码的运行时间,但是要注意的是一定放在所有代码的第一行,即使第一行是注释也要放在注释上面,否则会报错。
output:
CPU times: user 8min 54s, sys: 11.6 s, total: 9min 5s
Wall time: 8min 47s
# 写数据
# 建立一个空的df
df= pd.DataFrame() # 或df = pd.DataFrame(columns=('A','B'))
for i in idx:
a=
b=
df=df.append(pd.DataFrame({'A':[a],'B':[b]}),ignore_index=True)
import openpyxl
wb = openpyxl.load_workbook('2019-2.xlsx')
# 获取workbook中所有的表格
sheets = wb.sheetnames
print(sheets)
ouput:
['0201-0216', '0217-0223', '0224-0228']
则这个excel文件中有名为’0201-0216’, ‘0217-0223’, '0224-0228’的三种表,读取某张表可以直接用df[‘xxx’]表示。
3.1 查看数据类型:
df.dtypes
# 修改单列数据类型
df['A'] = df['A'].astype(int)
df['A'] = df['A'].apply(int)
# 修改全部数据类型
df = df.applymap(int)
df = pd.DataFrame(df ,dtype=np.float)
3.2 查看头尾几行的数据
df.head()
df.tail()
默认5行,可直接在括号内填入具体的值来显示自己想看的行数。
3.3 查看行列数
使用shape查看行列数,参数0为查看行数,参数1为查看列数。
df3.shape[0]
df3.shape[1]
3.4 查看行名与列名
使用index为查看行名,columns为查看列名。
df.index
df.columns
3.5 查看数据值
使用values可以查看DataFrame里的数据值,返回的是一个数组。
df.values
按行:
可使用loc或iloc,loc是根据行名,iloc是根据行的索引。如果查看多行要多嵌套一个中括号。
# 单行
df.loc['xxx']
df.iloc[0]
# 多行
df.loc[['aa','bb']]
df.iloc[[0,1]]
按列:
直接使用列名即可。同样如果要取多列,注意需要两个中括号。
# 某一列
df['xxx']
# aaa列和bbb列
df[['aaa', 'bbb']]
3.6 按条件查找
例如:查找年龄为18且成绩大于90的学生学号和姓名。
df[(df['age'] == 18) & (df['score']>90)][['no','name']]
3.7 查看空值的个数
# 查看有值的个数
df.info(verbose=True, null_counts=True)
# 按列查看空值个数
df.isnull().sum(axis=0)
# 按行查看空值个数
df.isnull().sum(axis=1)
# 整个df的空值个数
df.isnull().sum().sum()
3.8 查看重复值个数
df['列名'].value_counts()
3.9 删除重复项,同时根据另一列数值选取保留行
# 方法1:
# 1. 对 B 列进行降序排序;
# 2. 删除 A 列的重复的行,但保留第一次出现的行。
# 3. 重置索引
df.sort_values("B", ascending=False).drop_duplicates("A", keep='first').reset_index(drop=True)
# 方法2:
# 通过 groupby 的方法实现。
df.groupby(['A'])['B'].max()
3.10 分组统计
# 不包含NaN值
a = df.groupby(["列1","列2"],as_index=False)['count'].count()
# 包含NaN值
a = df.groupby(["列1","列2"],as_index=False)['count'].size()
利用merge函数可以查找两个表中相同元素,效率非常高。
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False,
validate=None)
参数:
left: 拼接的左侧DataFrame对象
right: 拼接的右侧DataFrame对象
on: 要加入的列或索引级别名称。 必须在左侧和右侧DataFrame对象中找到。 如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。
left_on:左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
right_on: 左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
left_index: 如果为True,则使用左侧DataFrame中的索引(行标签)作为其连接键。 对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。
right_index: 与left_index功能相似。
how: One of ‘left’, ‘right’, ‘outer’, ‘inner’. 默认inner。inner是取交集,outer取并集。比如left:[‘A’,‘B’,‘C’];right[’'A,‘C’,‘D’];inner取交集的话,left中出现的A会和right中出现的买一个A进行匹配拼接,如果没有是B,在right中没有匹配到,则会丢失。'outer’取并集,出现的A会进行一一匹配,没有同时出现的会将缺失的部分添加缺失值。
sort: 按字典顺序通过连接键对结果DataFrame进行排序。 默认为True,设置为False将在很多情况下显着提高性能。
suffixes: 用于重叠列的字符串后缀元组。 默认为(‘x’,’ y’)。
copy: 始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此。
indicator:将一列添加到名为_merge的输出DataFrame,其中包含有关每行源的信息。 _merge是分类类型,并且对于其合并键仅出现在“左”DataFrame中的观察值,取得值为left_only,对于其合并键仅出现在“右”DataFrame中的观察值为right_only,并且如果在两者中都找到观察点的合并键,则为left_only。
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
参数: