目录
实战1:我们可以用文本模式读取csv,也可以用pandas模式读取csv
用文本读取做(主要是学习pandas,不做注释了,后面看情况加)
安装pandas库
pycharm图形安装
- 打开PyCharm
- 选择file
- 选择settings
- 选择Project: workspace
- 选择Python Interpreter
- 看看有没有pandas库
- 点击+号,搜索pandas,选版本,install package下载,成功左下角会有绿色的提示
终端安装
pip install pyinstaller (-i 镜像源地址) (=默认最新版本)
直接实战
实战1:我们可以用文本模式读取csv,也可以用pandas模式读取csv
文本读取
with open("wuhan2021s1.csv","r",encoding="GBK") as txtfile:
#1. 先读到列表里 ,每一行是列表里面的一个数据,数据是字符串
data_lst=txtfile.readlines()#一行一行的读放到列表里
print(data_lst)#输出列表
pandas读取
#打开csv文件 返回的是一个表格,有行索引和列索引,第一行会变成列索引,行索引是从第二行开始从0开始,返回的是二维的dataframe结构,
wuhan=pd.read_csv("wuhan2021s1.csv",encoding="GBK")
print(wuhan)
实战2:商品房数据统计 csv在标题下面
数据来源:武汉市住房和保障房屋管理局
附件中为‘2021年第一季度全市预计达到销售条件的商品房项目清单’,
文件名为‘wuhan2021s1.csv’,文件编码格式为'GBK'。
请分析数据格式及内容,完成以下功能:
输入选项n
1 如果n为'规模升序',输出按照'可售住宅总规模'的数据从小到大排序,并依次输出数据,每行内的数据间以空格间隔,输出
2 如果n为'规模降序',输出按照'可售住宅总规模'的数据从大到小排序,并依次输出数据,每行内的数据间以空格间隔,输出
3 如果n为'区属'中的某个区,如'洪山区', 首先按照文件数据顺序依次每行输出该区属的项目信息,每行内的数据间以空格间隔,输出格式见示例 然后输出该区属内的可售住宅总规模之和,单位为平方米,保留两位小数,输出
4 如果n为'总规模',则输出该文件中所有项目的可售住宅总规模之和,单位为平方米,严格保留两位小数,输出
5 如果n不是以上输入,则输出'错误输入'
用文本读取做(主要是学习pandas,不做注释了,后面看情况加)
with open("wuhan2021s1.csv", "r", encoding='GBK') as f:
ls = []
for i in f.readlines()[1:]:
ls.append(i.strip().split(','))
n = input()
if n == '规模降序':
for i in sorted(ls, key=lambda x: eval(x[-1]), reverse=True):
print(' '.join(i))
elif n == '规模升序':
for i in sorted(ls, key=lambda x: eval(x[-1])):
print(' '.join(i))
elif n in set([i[1] for i in ls]):
result=0
for i in ls:
if i[1] == n:
print(' '.join(i))
result=result+eval(i[-1])
print("{:.2f}平方米".format(result))
elif n == '总规模':
print("{:.2f}平方米".format(sum([eval(i[-1]) for i in ls])))
else:
print("错误输入")
用pandas读取做
import pandas as pd
#用pandas模式读取csv
#打开csv文件 返回的是一个表格,有行索引和列索引,第一行会变成列索引,行索引是从第二行开始从0开始,返回的是二维的dataframe结构,
wuhan=pd.read_csv("wuhan2021s1.csv",encoding="GBK")
#print(wuhan)#自己可以打印表格出来看看
#print(wuhan.dtypes)#dtypes是dataframe结构的属性 可以打印出每列是什么类型 数字会变成对应的数字类型
#总规模求和
#print(wuhan["可售住宅总规模(㎡)"])#找到名为”可售住宅总规模(㎡)“这一列,然后输出成一维表格
total=wuhan["可售住宅总规模(㎡)"]
#print(type(total))#total是series一唯数据类型
#print(sum(total))#可以直接用sum对一维数据表进行求和,也就是对一列进行求和
qushu0=wuhan["区属"]#是series一维数据表类型,找到名为"区属"这一列,然后输出成一维表格
qushu1=list(wuhan["区属"])#一维数据表类型转为列表
qushu2=set(wuhan["区属"])#一维数据表类型转为元组,也等于去重
#print(qushu0)#可以自己打印观看
#print(qushu1)#可以自己打印观看
#print(qushu2)#可以自己打印观看
n=input()#获取一个值
if n=="总规模":
print(sum(total))#直接对一维数据表求和
elif n in qushu2:#去和元组里的数据进行对比
area_df=wuhan[wuhan["区属"]==n]#中括号里的是条件,支持这么筛选,找出和n一样的数据
print(area_df)#打印出和n一样的数据
print(sum(area_df["可售住宅总规模(㎡)"]))#求和n一样的数据的总规模
#elif n in qushu0.values:#也可以这么写
#print(wuhan[wuhan["区属"]==n])#在wuhan里找符合参数条件的数据
elif n=="规模升序":
#排序,返回一个新的,对by对应的列进行排序,ascending是升序降序
sort_df=wuhan.sort_values(by="可售住宅总规模(㎡)",ascending=True)
print(sort_df)
elif n=="规模降序":
#排序,返回一个新的,对by对应的列进行排序,ascending是升序降序
sort_df=wuhan.sort_values(by="可售住宅总规模(㎡)",ascending=False)
print(sort_df)
else:
print("错误输入")