一个数据量很大的csv文件,但是没有分行,excel打开后只有一行,如何改变格式,使数据按格式对齐
csv文件在python中打开是这样
A君目前在一家资产评估公司实习,他的工作日常就是跑遍市区里的住宅小区,调查小区的地址、建筑年份和每栋楼里每个单元里每一户的朝向和面积。比如一户的资料是:富安花园(小区)3栋 2单元 401户;朝向:南北朝向;面积:90平方。他需要把每一户的信息都记录下来。为了节省时间,通常他们会当场把一栋楼里所有单元的数据画在一张平面图里。等回去之后,再把平面图记录的数据,录入到excel表里。
举个例子,上面这张平面图表示的是这一栋有4个单元,每个单元有15层楼,其中1,2单元有两户,面积和朝向是140平方,南北朝向。3单元有四户,有2户面积60平方,南北朝向,2户面积80平方,东西朝向;4单元有四户,面积70平方,东西朝向。A君抱怨原本看房已经很累人了,录入更烦。可能你觉得用excel的自动填充功能不是很方便吗,事情远没有这么简单。确实,有一些重复的单元格只要填一次,自动下拉就可以复制粘贴,对于A君(excel菜鸟)来说,每次只要手动输入户室号就可以。(当然掌握一些excel技巧可以节省一些功夫)
不过,不同单元的户数、朝向和面积不完全是一样的,所以不能以一个单元的数据复制给其他单元,比如说,好不容易输入了1单元的数据,复制给了2单元,但因为3单元有4户,面积和朝向都不一样,所以3单元又得重新处理,户室号、面积、朝向都不一样。
csv
模块:实现用于以 CSV 格式读取和写入表格数据的类。 csv
模块的reader
和writer
对象读取和写入序列。
程序分析:需要注意的点是户室是变化的,需找出规律,然后按照规律循环,规律:201+1 = 202,202+99=301,再由301+1=302,以此循环
代码解析:
import csv
f = open('s.csv', 'w', encoding='utf-8', newline="")
csv_writer = csv.writer(f)
csv_writer.writerow(["小区名称", "地址", "建筑年份", "楼栋", "单元", "户室", "朝向", "面积"])
a = 201
for i in range(10):
for j in range(2):
list1 = ["晨星花园", "双云路88号", "2010", "1栋", "1单元", a, "南北", 140]
csv_writer.writerow(list1)
a = a + 1
a += 98
import pandas as pd
df = pd.read_csv('test.csv',encoding='utf-8')
data = df.columns.tolist() #将一行的数据转化为list
# 将list 切片
n = 7 #大列表中几个数据组成一个小列表
result = [ data[i:i + n] for i in range(0, len(data), n) ]
for item in result:
print(item)
##写入新的文件中
res = pd.DataFrame(result[1:],columns=result[0])
#处理日期有问题的内容
res['gps_time'] = res['gps_time'].map( lambda x:x.split('.')[0] )
res['create_time'] = res['create_time'].map( lambda x:x.split('.')[0] )
print(res)
res.to_csv('new.csv',encoding='utf-8',index=False)