python-pandas学习笔记

读写文件

一般读写xlsx/csv文件

import pandas as pd

'''
filename: 为文件名或者路径,filename也可以是一个url
sheet_name: 指定要读取的xlsx文件的子表,默认为0
返回值df为DataFrame类型的二维数据表格,下同
'''
df = pandas.read_excel(filename,sheet_name = 0) # 

# 写入xlsx格式文件
df.to_excel(filename,index = False) # 不写入行索引,默认是写入的

# 读取csv文件
df = pandas.read_csv(filename)

#写入csv文件
df.to_csv(filename,index = False,sep = ',') # sep为指定的分隔符

读写有多个子表的excel表格

import pandas

# 读取所有子表
df = pandas.read_excel(file_name,sheet_name = None)

查询、遍历

获取表头信息

header_info = df.columns.values # 返回的是numpy.ndarray类型数据
header_info = df.columns.values.tolist() # 转为list

按行遍历

data = {'a': {'x': [1, 1], 'y': [2, 1], 'z': [3, 1]},
        'b': {'x': [1, 2], 'y': [2, 2], 'z': [3, 2]},
        'c': {'x': [1, 3], 'y': [2, 3], 'z': [3, 3]}}
data_pd = pd.DataFrame(data)
 
print(data_pd)
 
for row in data_pd.index:
    print(data_pd.loc[row]['a'])
 
for row_id in range(data_pd.shape[0]):
    print(data_pd.iloc[row_id]['a'])
 
for index, row in data_pd.iterrows():
    print(row['a'])

'''
输出:
        a       b       c
x  [1, 1]  [1, 2]  [1, 3]
y  [2, 1]  [2, 2]  [2, 3]
z  [3, 1]  [3, 2]  [3, 3]

[1, 1]
[2, 1]
[3, 1]
'''

获取某一行并转为list数据

import pandas as pd
 
order_list = pd.DataFrame(np.array([[12,3,1],[13,4,0],[17,4,5],[16,5,2],[14,3,1]]),
                          columns = ['capacity required','unit returns','time remaining'])
 
order1 = np.array(order_list.iloc[1])
order1 = order1.tolist()

判断表格是否为空

df.empty # 若为空返回True,否则返回False

按照列名筛选出整行信息

# 筛选出二维表中所有某列值为“XX”的全部行信息
df_find = df_books[df_books['出版年份'] == 2015] # 打印出出版年份所有出版年份为2015的书籍信息

按单元格值筛选另一列信息

# 筛选出所有某列值为“XX”的“YY”列信息,返回的是 Series 对象
df_find = df_books.loc[df_books['出版年份'] == 2015,'书名'] # 打印出出版年份所有出版年份为2015的书名

获取单个单元格以及单元格内容

# 筛选出所有某列值为“XX”的“YY”列信息,返回的是 Series 对象
# 筛选出图书编号为15的书名,这里的图书编号为二维表的主键,所以返回的Series对象里面只有一个元素
df_find = df_books.loc[df_books['图书编号'] == 15,'书名']

# 获取单个单元格内容
df_find_cont = df_books.loc[df_books['图书编号'] == 15,'书名'].item() # 返回的是str类型的对象

二维表的美观显示

强烈推荐用prettytable库里面的接口显示二维表格,下面是显示效果。
二维表格显示效果

对应的代码:

import pandas
from prettytable import PrettyTable

df_readers = pandas.read_excel("./readers.xlsx",sheet_name = 0)
tb_header = df_readers.columns.values.tolist() # 获取表头信息,并转为list
table = PrettyTable(tb_header) # 创建显示表格

rows = df_readers.values.tolist() # 获取表格内容,不含表头,转为2维list

for r in rows:
	table.add_row(r)
print(table)

修改

修改单个表格的内容

# 先筛选出指定单元格,然后赋值即可
df_find = df_books.loc[df_books['图书编号'] == 15,'书名'] = "Python编程——从入门到放弃"

增删表格

从其他类型对象生成DataFrame对象

df = pandas.DataFrame(new_dict) # 字典
df = pandas.DataFrame(np_2arr) # numpy中的二维数组或者用2维list也行

# 注意:字典生成的DataFrame会按照键值生成表头,numpy数组或2_list用默认的表头

增加一列

# 直接操作新列名,赋予所有列一个初始值即可
df['新列名'] = new_col_value

删除一列

# 方法一
del df['列名'] 

# 方法二
'''
colName:要删除的列名
axis:为0时表示删除的是行索引,为1时表示删除的是列名
inplace:默认值为False,表示不修改原df,返回一个新的df;True时表示在原df上修改。
'''
df_new = df.drop('colName',axis = 1,inplace = False)

增加一行

用loc方法

df.loc[end+1] = list_array # 与新增列类似

删除行

其实每一次筛选就是一次删除。

# 删除’col_name‘列中值为“col_value”的行,注意返回值
df = df[~df['col_name'].isin([col_value])]

拼接表格

后缀拼接单行

appen方法,该方法默认不会修改当前表格,而是返回一个新的DataFrame类型的数据。

'''
df1与df2的表头需要一致,ignore_index表示忽略行索引。
df2可以是表格,也可以是字典或类似字典格式的对象如json,不管是哪种,键数要与df1保持一致
'''
df_new = df1.append(df2,ignore_index = True) 

持续更新中。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值