python中csv文件的读、写、以及合并
写csv
- 方法1:利用csv包,一行一行写入,来自:Python 将数据写入CSV文件
# 导入CSV安装包
import csv
# 1. 创建文件对象
f = open('xxx.csv','w',encoding='utf-8')
# 2. 基于文件对象构建 csv写入对象
csv_writer = csv.writer(f)
# 3. 构建列表头
csv_writer.writerow(["姓名","年龄","性别"])
# 4. 写入csv文件内容
csv_writer.writerow(["l",'18','男'])
csv_writer.writerow(["c",'20','男'])
csv_writer.writerow(["w",'22','女'])
# 5. 关闭文件
f.close()
- 方法2:利用pandas包
- 利用字典形式,一列一列写入,来自python写入csv文件的几种方法总结
import pandas as pd
#任意的多组列表
a = [1,2,3]
b = [4,5,6]
#字典中的key值即为csv中列名
dataframe = pd.DataFrame({'a_name':a,'b_name':b})
#将DataFrame存储为csv,index表示是否显示行名,default=True
dataframe.to_csv("test.csv",index=False,sep=',')
- 整体写入,强推
上面这种用key,value的写入方式,不适合大批量的数据,比如说,你有几十几百列数据要写的…所以,一般我采用的比较多的是整体写入,很方便好用:
data_frame = pd.DataFrame(columns=keys,data=your_data)
data_frame.to_csv('xxx.csv'),sep='\t', index=False)
当columns=['sex,‘age’],data=[[1,34],[0,53],[1,26]]时,csv是这样的:
sex age
0 1 34
1 0 53
2 1 26
当columns=['name,‘test_label’,‘test_proba’],data=[[‘张三’ ,[1 1 0 1 1 0 1],[0.8 0.9 0.5 0.6 0.8 0.6 0.9],[‘李四’ ,[1 0 1 1 0 1 1],[0.7 0.9 0.8 0.6 0.2 1. 0.5]]],csv文件是这样的:
name test_label test_prob
0 张三 [1 1 0 1 1 0 1] [0.8 0.9 0.5 0.6 0.8 0.6 0.9]
1 李四 [1 0 1 1 0 1 1] [0.7 0.9 0.8 0.6 0.2 1. 0.5]
columns是文件表头,赋值的keys是一个列表,如[‘name’,‘sex’,‘age’…],表示每一列的索引,可以自己定义,如果不定义的话,写入时会自动分配[0,1,2…]作为索引。
data就是你要写入的数据,可以是numpy数组,也可以是列表,但是要注意,列表或数组的列数要和columns的数量统一,毕竟一个index要对应一个value。
sep是分割符,自己设定,可以选择’,’,’\t’等。
P.S. 这里插一句,如果想写成excel文件,也很简单,只要将to_csv改成to_excel即可:
info.to_excel('xxx.xlsx')
读csv
import pandas as pd
# 读取csv文件,选择分割符,要和csv文件里所使用的分割符一致
csv_data = pd.read_csv('xxx.csv', sep='\t')
# 读取csv文件的index,方便后面提取value
base_keys =[key for key in csv_data ]
csv_values = csv_data [base_keys[1:4]].values
这里csv_data 是一个dadaframe,要获取文件中的value的话需要用.values来获取。如果要用全部的值,直接csv_data .values即可,如果只要其中某些值,那我们可以给定keys或者给定keys所在的位置,然后再用.values进行读取。
csv文件合并
- 方法1,利用csv包
有时候需要将两个csv文件进行合并,其实合并的操作也是蛮简单的,不过有个前提:要合并的两个文件的列数得是一样的~不然读取的时候会报错。
比如现在有a.csv和b.csv两个文件,直接读取其中一个文件,然后利用mode=‘a+’,追加写入另一个文件即可:
b_data = pd.read_csv('b.csv', sep='\t')
# 选择header=False表示不保留列名,index=False表示不保留行索引
b_data .to_csv('a.csv', mode='a+', index=False,header=False,sep="\t")
想要更换csv中的某些值,或新增行、列,可以参考Pandas:DataFrame数据的更改、插入新增的列和行
- 方法2,利用pd.merge()函数
利用pd.merge()进行拼接的话,可以参考【python】详解pandas库的pd.merge函数