2022年 11月 3日

python处理CSV文件(读取、写入、数据集成)

写在前面:

本文是在个人学习实践中总结,如有类似需要,仅供参考。


  • 循环获取指定列的单个数据,处理后保存到列表中

  1. import csv
  2. import geohash
  3. jingdu=[]
  4. weidu=[]
  5. Value=[]
  6. def read_csv():
  7. with open("train.csv",'r') as fp:
  8. reader=csv.DictReader(fp)
  9. for x in reader:
  10. # 获取geohashed_end_loc列中的数据并存储到列表中
  11. value=x['geohashed_end_loc'] #geohashed_end_loc为CSV文件其中一个列名
  12. Value.append(value)
  13. #对数据进行处理,并存储到列表中
  14. location1 = geohash.decode(value)
  15. jingdu.append(location1[0])
  16. weidu.append(location1[1])
  17. read_csv()
  • 获取指定列的全部数据保存到列表中

  1. import pandas as pd
  2. df = pd.read_csv('工作簿1.csv')
  3. value=df[['姓名', '学院', '学号', '联系方式']] #CSV文件中的列名
  4. # 把series转换成list:方法1 df['a'].values.tolist() 方法2:df['a'].tolist()
  5. a=value['姓名'].values.tolist()
  6. print(a)
  • 向CSV中写入数据

  1. import pandas as pd
  2. #字典中的key值即为csv中列名
  3. dataframe = pd.DataFrame({'标题1':jingdu,'标题2':weidu}) #jingdu、weidu为数据列表
  4. #将DataFrame存储为csv,index表示是否显示行名,default=True
  5. dataframe.to_csv("train2.csv",index=True,sep=',')
  • 向CSV中追加行

  1. import csv
  2. #对csv文件进行写入操作,mode="w"表示操作模式为只写,如文件不存在则自动创建文件覆盖写入
  3. with open(r"2.csv",mode="w",newline="",encoding="utf8") as cf:
  4. wf=csv.writer(cf)
  5. wf.writerow(["name", "money"]) #写入标题行
  6. data = [['lili','10'],['lili','115'],['lili','20']]
  7. for i in data:
  8. wf.writerow(i)
  9. #末尾追加写入,文件必须已存在
  10. with open(r"2.csv",mode="a",newline="",encoding="utf8") as cfa:
  11. wf = csv.writer(cfa)
  12. data2 = [['lili','10']]
  13. for i in data2:
  14. wf.writerow(i)
  • 向CSV中追加列

  1. import pandas as pd
  2. import numpy as np
  3. data = pd.read_csv(r'2.csv') #打开一个csv,得到data对象
  4. data['追加'] = data1 #将data1列表数据插入新列
  5. data.to_csv(r"3.csv",mode = 'a',index =False)
  6. #保存到csv, mode=a,以追加模式写入,hreade表示列名,默认为true,index表示行名,默认为true,再次写入不需要行名
  • CSV数据集成

  1. import pandas as pd
  2. df = pd.read_csv('工作簿1.csv') #包含列名: '姓名', '学院', '学号', '联系方式', '贫困生'
  3. dd = pd.read_csv('2.csv') #包含列名: '姓名', '值班节数'
  4. data = pd.merge( dd, df,on=['姓名'], how='left') # pandas csv表左连接 dd df 谁在前以谁为准,“姓名”为公共列名
  5. data = data[['姓名', '学院', '学号', '联系方式', '贫困生', '值班节数']]
  6. # pandas写入表格数据
  7. data.to_csv(r'data2.csv', encoding='utf-8-sig')