pandas处理excel/csv文件数据

1.读文件

import pandas as pd
# 一个sheet的情况
df = pd.read_excel('test.xlsx')
# 多个sheet的情况
df1 = pd.read_excel(path, sheet_name='AAA')
df2 = pd.read_excel(path, sheet_name='BBB')

读csv文件请用:.read_csv()

2.获取数据

1).获取数据并转list
data = df.values.tolist()
for i in data:
     print(i)
2).按照表头名遍历: k为索引,v为数据对象
for k, v in df.iterrows():
       print(v['表头名'])
3).获取表头名
head_names = list(df.columns)
4).取某列的数据:
df['列名']
# 取某列的数据并转为list
df['列名'].values.tolist()
# 取等于x的m行数据
df[df['列名'] == x]

3.写文件

1).一个文件一个sheet
# data_lists 数据:二维数组
# header_list 表头:一位数组

data_lists = [[1,2,3],[4,5,6]]
header_list = ["列名1","列名2","列名3"]
df = pd.DataFrame(data=data_lists,
                  index=None,
                  columns=header_list)
df.to_excel(”文件名.xlsx“, index=index)
2).一个文件多个sheet
# 比如,两个sheet,一个为“统计”,一个为“详细”

#1)创建相关对象
writer = pd.ExcelWriter(record_file_name)
header_list = ["列名1","列名2","列名3"]
df1 = pd.DataFrame(columns=header_list)
df2 = pd.DataFrame(columns=header_list)

#2)写数据
tmp_dict = {
	"列名1":"xxx",
	"列名2":"xxx",
	"列名3":"xxx",
}
df1 = df1.append([tmp_dict], ignore_index=True)
df2 = df2.append([tmp_dict], ignore_index=True)

#3)写文件
df1.to_excel(writer, sheet_name="统计", index=False)
df2.to_excel(writer, sheet_name="详细", index=False)
writer.save()
  • 读取csv将其中的excel方法替换为csv即可
3).其他

上面所有数据都存放在二维数组中,我们必须每一列和对应的表头对齐
为了更方便,pandas可以以字典方式存在二维数组,比如:

df = pd.DataFrame(columns=['key'])
df.append([{ "key":value}])

4.其他常见操作

def func(): # 将列1和列2的数据相加
	app_qita1(series):
    return series['列名1'] + series['列名2']
    
df.apply(func, axis=1) # 1为逐行处理,0位逐列处理
  • 重置索引
    .reset_index()

  • 调整列的个数:对列进行重组-也即删除,调序等
    df = df.reindex(columns=new_columns)

  • 修改列名和索引
    .rename(index={}, columns={})

  • 数据合并-merge
    https://zhuanlan.zhihu.com/p/102274476
    df.merge(df1, on=['列名1', '列名2'], how='left') 以左边为主
    df.merge(df1, on=['列名1', '列名2'], how='right') 以右边为主

  • 数据合并-concat

pieces = [df1, df2]
#print(len(df.values.tolist()))
df = pd.concat(pieces)
df.to_excel('tsd.xlsx')  # 数据保存路径
  • 数据求和,求平均,求中位数,求最大最小值,去重(删除),去重
    .mean(),.max(),min(),middle(),.drop_duplicates(),.unique()

  • 分组后对某些列求和,求平均,求中位数,求最大最小值
    df.groupby(by=['列名1', '列名2'], as_index=False)['列名x', '列名y'].sum()

  • 修改某列的数据类型:
    df['列名'].astype(str)

  • 为nan数据设定默认值为0
    df['列名'].fillna(0, inplace=True)
    df.fillna(0, inplace=True)

  • 将pandas转为json,dict等

# 转为dict
data = df.to_dict('records')
# 转为json
data_json = df.to_json(orient="records",force_ascii=False)

refence.

1.10分钟入门pandas
2.扩展阅读
3.三板斧

- apply:操纵行列
- map:操纵行列
- applymap:操纵单元格
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值