前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas分析excel数据

pandas分析excel数据

原创
作者头像
花落花相惜
发布2021-12-04 10:27:47
1K0
发布2021-12-04 10:27:47
举报
文章被收录于专栏:花落的技术专栏

1.问题

在python中,读写excel数据方法很多,比如xlrd、xlwt和openpyxl,实际上限制比较多,不是很方便。比如openpyxl也不支持csv格式。有没有更好的方法?

2.方案

更好的方法可以使用pandas,虽然pandas不是专门处理excel数据,但处理excel数据确实很方便。

本文使用excel的数据来自网络,数据内容如下:

2020汽车销售数据

2.1.安装

使用pip进行安装。

代码语言:txt
复制
pip3 install pandas

导入pandas:

代码语言:txt
复制
import pandas as pd

下文使用pd进行pandas的操作。

2.2.读写文件

读取文件,比如excel,csv文件

代码语言:txt
复制
# df是pandas.core.frame.DataFrame类型
代码语言:txt
复制
df = pd.read_excel('./data/2020-suv.xlsx')
代码语言:txt
复制
# read_csv可以指定分割符,编码方式等
代码语言:txt
复制
df2 = pd.read_csv('./data/2020-suv.csv')

写入文件:

代码语言:txt
复制
df.to_excel('./data/2020-suv-new.xlsx')
代码语言:txt
复制
df.to_csv('./data/2020-suv-new.csv')

2.3.数据操作

  • 获取列名
代码语言:txt
复制
all_cols = df.columns
代码语言:txt
复制
print(all_cols)
代码语言:txt
复制
# 输出,df.columns并非list类型
代码语言:txt
复制
Index(['销量排名', '车系', '官方价', '从属品牌', '1-12月销量'], dtype='object')
代码语言:txt
复制
# df.columns并非list类型,可以转化list
代码语言:txt
复制
cols = list(df.columns)
  • 获取列数据
代码语言:txt
复制
col_data = df[u'车系']
代码语言:txt
复制
mul_col_data = df[ [u'车系', u'1-12月销量'] ]
  • 获取行数据
代码语言:txt
复制
row_data = df.iloc[row_index]
  • 获取所有行数据
代码语言:txt
复制
all_data = df.values
  • 切片获取多行数据
代码语言:txt
复制
mul_row_data = df.iloc[2:4]
  • 获取单元个数据
代码语言:txt
复制
cell_data = df.iloc[row_index][col_index]

2.4.数据筛选

Excel数据筛选比较实用,用pandas同样可以,并且筛选代码保存后,下次可以直接使用。

  • 某个字段包含指定值
代码语言:txt
复制
# 包含一个值,na表示是否需要填充,case表示是否区分大小写,更强大的是contains还支持正则表达式
代码语言:txt
复制
sub_df = df[ df[col_name].str.contains('key1', na=False, case=False) ]
代码语言:txt
复制
# 包含多个值,多次调用即可
代码语言:txt
复制
sub_df1 = df[ df[col_name].str.contains('key1', na=False, case=False) ]
代码语言:txt
复制
sub_df2 = sub_df1[ sub_df1[col_name].str.contains('key2', na=False, case=False) ]
代码语言:txt
复制
# 包含多个值(或)
代码语言:txt
复制
sub_df = df[ df[col_name].str.contains('key1|key2|key3', na=False, case=False) ]
代码语言:txt
复制
# 不包含,也就是非的过滤
代码语言:txt
复制
sub_df = df[ ~df[col_name].str.contains('key1', na=False, case=False) ]

上述操作,都假设字段类型是字符串类型,不然会抛异常。可以通过以下的方法,可以判断字段是否是字符类型:

代码语言:txt
复制
pd.api.types.is_string_dtype(df[u'车系'])
代码语言:txt
复制
# 其他类型也有类似的函数,可以用dir查看有哪些类型判断
代码语言:txt
复制
print(dir(pd.api.types))
代码语言:txt
复制
# 可以通过dtypes查看字段的类型
代码语言:txt
复制
pd.dtypes
代码语言:txt
复制
pd[u'1-12月销量'].dtypes
  • 条件过滤
代码语言:txt
复制
# 大于
代码语言:txt
复制
df[ df['1-12月销量'] > 50000 ] .values
代码语言:txt
复制
# 相等
代码语言:txt
复制
df[ df['1-12月销量'] == 50000 ] .values

2.5.数据写入

  • 添加一行数据:
代码语言:txt
复制
# 插在最后,row_datas是list
代码语言:txt
复制
df.loc[len(df.index)] = row_datas
  • 插入一列数据
代码语言:txt
复制
# 在指定列前面插上一列数据
代码语言:txt
复制
df.insert( col_index, col_name, col_datas, True)
  • 更新某个单元值
代码语言:txt
复制
df.iloc[row][col] = u'new-data'

2.6.数据删除

  • 删除一列
代码语言:txt
复制
df2 = df.drop('官方价', axis=1, inplace=False)
代码语言:txt
复制
print(df2)
代码语言:txt
复制
# 输出
代码语言:txt
复制
销量排名           车系   从属品牌  1-12月销量
代码语言:txt
复制
0       1         哈弗H6     哈弗   376864
代码语言:txt
复制
1       2       本田CR-V     本田   249983
代码语言:txt
复制
2       3           博越   吉利汽车   240811
代码语言:txt
复制
3       4          途观L     大众   178574
代码语言:txt
复制
4       5  长安CS75 PLUS   长安汽车   266824
代码语言:txt
复制
..    ...          ...    ...      ...
代码语言:txt
复制
282   283      北汽新能源EX  北汽新能源      879
代码语言:txt
复制
283   284        奔腾X40     奔腾    20412
代码语言:txt
复制
284   285    标致2008新能源     标致       37
代码语言:txt
复制
285   286       猎豹CS10   猎豹汽车       14
代码语言:txt
复制
286   287         森雅R7     一汽        1
代码语言:txt
复制
[287 rows x 4 columns]
  • 删除一行
代码语言:txt
复制
df3 = df.drop(2, axis=0, inplace=False)
代码语言:txt
复制
print(df3)
代码语言:txt
复制
# 输出
代码语言:txt
复制
     销量排名           车系           官方价   从属品牌  1-12月销量
代码语言:txt
复制
0       1         哈弗H6   9.80-15.49万     哈弗   376864
代码语言:txt
复制
1       2       本田CR-V  16.98-27.68万     本田   249983
代码语言:txt
复制
3       4          途观L  21.58-28.58万     大众   178574
代码语言:txt
复制
4       5  长安CS75 PLUS  10.69-15.49万   长安汽车   266824
代码语言:txt
复制
5       6       本田XR-V  12.79-17.59万     本田   168272
代码语言:txt
复制
..    ...          ...           ...    ...      ...
代码语言:txt
复制
282   283      北汽新能源EX  18.39-20.29万  北汽新能源      879
代码语言:txt
复制
283   284        奔腾X40          暂无报价     奔腾    20412
代码语言:txt
复制
284   285    标致2008新能源  16.60-18.80万     标致       37
代码语言:txt
复制
285   286       猎豹CS10   7.98-11.98万   猎豹汽车       14
代码语言:txt
复制
286   287         森雅R7   6.69-10.69万     一汽        1
代码语言:txt
复制
[286 rows x 5 columns]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.问题
    • 2.方案
      • 2.1.安装
      • 2.2.读写文件
      • 2.3.数据操作
      • 2.4.数据筛选
      • 2.5.数据写入
      • 2.6.数据删除
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档