Pandas处理excel的基本操作
0x02操作
2.1 pandas安装
这里把简单说下安装,因为pip install的方式一般会报错,快速的解决方式是通过conda来安装, 参考
2.2 处理excel的常用操作
打开excel
import pandas as pddf = 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操作
# 生成dataFramedef 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 总结
- iloc只能通过行号索引 , df.iloc[0] 是对的, 而df.iloc["a"] 是错误的。loc 和 ix 大部分时候行为都差不多, 但是当假如某个行的索引标签就是一个 INT 比如 1 的时候, loc 优先将 df.loc[1] 理解为行标签为 1 的索引, 而 df.ix[1] 优先将其理解为 行号为 1 的索引(就是第二行), 为了避免不小心犯错误, 建议:
当用行号索引的时候, 尽量用 iloc 来进行索引;
用标签索引的时候用 loc
- map和apply可以快速处理,axis控制处理的方向,默认是0,纵向处理
- 写入excel就是将最终处理好的dataFrame写入即可
0x04 参考
1.dataframe的一些操作
2.dataframe插入行列
4. ix,loc,iloc区别
5.map,apply,applaymap用法
以上是 Pandas处理excel的基本操作 的全部内容, 来源链接: utcz.com/z/513745.html