Pandas处理excel的基本操作

编程

0x02操作

2.1 pandas安装

这里把简单说下安装,因为pip install的方式一般会报错,快速的解决方式是通过conda来安装, 参考

2.2 处理excel的常用操作

打开excel

import pandas as pd

df = pd.read_excel(XLS_FILENAME, sheet_name)

## 如果你要处理的表格只有少数几列数据,可以用下面的方式打开

def read_xls(sheet_name=None, col1=0, col2=0):

if col1 == 0 and col2 == 0:

usecols = None

else:

usecols = [col1, col2]

df = pd.read_excel(XLS_FILENAME, usecols=usecols,

names=None, sheet_name=sheet_name, keep_default_na=False)

return df

读取sheet_name

# 方法一 ,直接获取

def get_sheet_names(_file=XLS_FILENAME):

xl = pd.ExcelFile(_file)

return xl.sheet_names

# 方法二,打开获取,读取所有的sheet, 将sheetname设置为None. 这时候得到的是一个dict结果.

def get_sheet_names(_file=XLS_FILENAME):

df = pandas.read_excel(_file, None);

return df.keys()

读取行列

    print(df.columns)  #查看列名

print(df.dtypes) #查看各列数据类型

print(df.columns.values) # 打印列名列表

# 三种方法读取第n行: ix,loc,iloc,均可以用来定位行列,区别见总结

data = df.ix[n-1].values # 0表示第一行 这里读取数据并不包含表头

data = df.loc[n-1].values

data = df.iloc[n-1, :].values

# 读取第n列

data = df.iloc[:, n-1].values

print("读取指定行的数据:

{0}".format(data))

print df.index.values

# 读取第x1-x2行, y1-y2行的数据, x,y从0开始

data = df.iloc[x1:x2, y1:y2]

# 读取第x行,第y列的值

data = df.iloc[x-1, y-1]

行列运算

行列运算也就是excel里面的那些公式处理差不多,为了方便快速运算,

常用的函数有sum, map, apply, applymap

    # 第n列的值*2

print df.iloc[:, n-1].map(lambda x: x*2)

# 第n列的值求和

print df.iloc[:, n-1].map(lambda x: x*2)

# 两列相乘,如下,第2列和4列相乘,放到第4列

df.iloc[:, 3] = df.apply(lambda x: x[1] * x[3], axis=1)

# 对第n列累加求和

print df.iloc[:, n-1].sum()

# 将DataFrame中所有的值保留两位小数显示

df.applymap(lambda x:"%.2f" % x)

DataFrame操作

# 生成dataFrame

def write_excel(filename, ):

data = []

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print df

data = [[1, 2, 3], [4, 5, 6], [7, 8, "aaa"]]

df = pd.DataFrame(data=data,

# index=[0,"exp2","exp3"],

columns=["col1", "col2", "col3", ])

print(df)

df.to_excel(filename, index=False, header=None) # 写入excel的时候不写行号和表头

# 针对指定行做插入或者删除操作 插入列

df.insert(0,"column_name",[11,12,13,14,15])

# 在表头插入空行,要用pd.Series(),不能用None

above = df.loc[:0]

below = df.loc[0:]

df = above.append(pd.Series(), ignore_index=True).append(below, ignore_index=True)

axis轴的用法

#按行求和

df["row_sum"] = df.apply(lambda x: x.sum(), axis=1)

#按列求和

df.loc["col_sum"] = df.apply(lambda x: x.sum())

0x03 总结

  1. iloc只能通过行号索引 , df.iloc[0] 是对的, 而df.iloc["a"] 是错误的。loc 和 ix 大部分时候行为都差不多, 但是当假如某个行的索引标签就是一个 INT 比如 1 的时候, loc 优先将 df.loc[1] 理解为行标签为 1 的索引, 而 df.ix[1] 优先将其理解为 行号为 1 的索引(就是第二行), 为了避免不小心犯错误, 建议:

  • 当用行号索引的时候, 尽量用 iloc 来进行索引;

  • 用标签索引的时候用 loc

  1. map和apply可以快速处理,axis控制处理的方向,默认是0,纵向处理
  2. 写入excel就是将最终处理好的dataFrame写入即可

0x04 参考

1.dataframe的一些操作

2.dataframe插入行列

4. ix,loc,iloc区别

5.map,apply,applaymap用法

以上是 Pandas处理excel的基本操作 的全部内容, 来源链接: utcz.com/z/513745.html

回到顶部