import pandas as pd
一、创建DataFrame
1. 新建DataFrame
df = pd.DataFrame(data = [['Sisyphus', 'male', 'D'],
['Athena', 'female', 'B'],
['Zeus', 'male', 'A'],
['Hera', 'female', 'C'],
['Lucifer', 'male', 'B']],
columns = ['name', 'gender', 'rank'],
index = [0, 1, 2, 3, 4])
dic = {'name': ['Sisyphus', 'Athena', 'Zeus', 'Hera', 'Lucifer'],
'gender': ['male', 'female', 'male', 'female', 'male'],
'rank': ['D', 'B', 'A', 'C', 'B']}
df = pd.DataFrame(dic)
| name | gender | rank | |
| 0 | Sisyphus | male | D |
| 1 | Athena | female | B |
| 2 | Zeus | male | A |
| 3 | Hera | female | C |
| 4 | Lucifer | male | B |
2. 读取excel/csv
df = pd.read_excel('test.xlsx', sheet_name = 'test_sheet')
df = pd.read_excel('test.xlsb', sheet_name = 'test_sheet', engine = 'pyxlsb')
df = pd.read_csv('test.csv')
二、DataFrame查询
1. 概览
df.head(n) # 返回前n行,DataFrame类型
df.tail(n) # 返回后n行,DataFrame类型
df.sample(n) # 随机返回n行样本,DataFrame类型
df.ndim # 返回DataFrame的列数
df.size # 返回DataFrame的值个数
df.shape # 返回DataFrame的行列数,Tuple类型
df.dtypes # 返回DataFrame的数据类型
df.axes # 返回DataFrame的行列标签信息
df['col'].sum()
df['col'].mean()
df['col'].count()
df['col'].max()
df['col'].min()
df['col'].describe() # 返回DataFrame的基本统计数据,标准差、中位数等
2. 筛选
(1). loc
df.loc[<索引表达式>, <列表达式>]
df.loc[0] # 指定索引值index = 0的行
df.loc[[0, 2]] # 指定索引值index = 0和index = 2的行
df.loc[0: 2] # 指定索引值index从0到2的行
df['name'] # 指定列名为name的列
df.name # 指定列名为name的列
df.loc[df['name'] == 'Sisyphus'] # 指定name为Sisyphus的所有行所有列
df.loc[df['name'] == 'Sisyphus', 'gender'] # 指定name为Sisyphus的所有行的gender列
df.loc[df['name'] == 'Sisyphus', ['gender', 'rank'] # 指定name为Sisyphus的所有行的gender和rank列
df.loc[(df['gender'] == 'male') & (df['rank'] == 'B')] # 多条件筛选,且
df.loc[(df['rank'] == 'A') | (df['rank'] == 'B')] # 多条件筛选,或
rank = ['A', 'B']
df.loc[df['rank'].isin(rank)] # .isin,与上式等价
df.loc[df['name'].str.contains('s')] # .str.contains,指定name中包含字符's'的所有行所有列
三、增删改
1. 增
df['col'] = '' # 增添空列
df.loc[:, 'col'] = '' # 在最后一列后面增加空列
df.fillna('空值') # 给所有空值赋值
df['col'].fillna('空值') # 给col列的空值赋值
df.insert(0, 'col', 'value') # 在第0列插入名为col值为value的列
df.loc[3] = ['', '', '', ''] # 若原数据不包含第三行,则新增第三行,否则修改第三行
2. 删
axis - 判断行或列,0为行,1为列
df.drop([1,3],axis = 0,inplace = True) # 删除index值为1和3的两行
df.drop(['col'],axis = 1,inplace = True) # 删除col列
3. 改
(1). replace
to_replace - 被替换的值
value - 替代值
inplace - 是否改变原数据
regex - 是否识别正则表达式
全值替换(字符串替换成某值):
df.replace(to_replace=None, value=None, inplace=False, regex=False)
局部替换(字符串中的某值替换成某值):
.str.replace()中的inplace参数不可用,只能进行重新赋值
df = df.str.replace(to_replace=None, value=None, regex=False)
(2). rename
df.rename(columns={'col': 'COL'}, inplace=True) # 对col列进行重命名
四、数据透视表pivot_table
pt = df.pivot_table(index=['', ''], columns=['', ''], values=['', ''], aggfunc=[numpy.sum, numpy.mean], fill_value=0, margin=1)
index - 行
columns - 列
values - 值
aggfunc - 统计函数,默认为numpy.mean,可用字典为不同的值进行不同的计算
aggfunc = {'height': numpy.max, 'weight': numpy.min, 'score': numpy.mean}
fill_value - 填充空值
margin - 是否汇总,默认为0
pivot_table的索引类型为multiple index,不能进行类似pt['col']的操作
需要利用.reset_index()进行索引重置
pt = pt.reset_index()
五、写入Excel
1. to_excel输出
每次调用to_excel函数时,若输出文件已存在,会重新覆盖该文件
df.to_excel('/out.xlsx', sheet_name='output')
2. 利用ExcelWriter写入多个sheet
writer = pandas.ExcelWriter('/out.xlsx')
df.to_excel(writer, sheet_name='df')
pt.to_excel(writer, sheet_name='pt')
writer.save()
本文介绍了Python Pandas DataFrame的创建、查询、增删改操作,重点讲解了如何使用loc进行筛选,replace和rename方法进行数据修改,以及数据透视表pivot_table的使用,并探讨了DataFrame写入Excel的两种方法。

1万+

被折叠的 条评论
为什么被折叠?



