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.其他常见操作
-
排序
df = df.sort_values(by=['列1'], ascending=False)
# 以列1降序排列 -
处理pandas的行和列数据:apply,map,applymap
https://www.jb51.net/article/226861.htm
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)
-
数据合并-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.
- apply:操纵行列
- map:操纵行列
- applymap:操纵单元格