csv文件的基本操作——Python

一、csv文件介绍

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。
在平时,经常会遇到csv文件存储标签信息,也会新建csv文件记录训练的情况。因此对csv文件的一些日常操作做一个总结,方便自己以后复习~~(搬运)~~

二、基本库(csv、pandas)

(一)csv库的基本操作

1 、将文件a(已有)的前五行复制到文件b(新建)

import csv
path_a=r'E:\pythonwork\data_raw.csv'
path_b=r'E:\pythonwork\data_pro.csv'
--------------------------------------------------------
#写法1
#这种写法,有打开open就要有关闭close!!
a=open(path_a) #open
#1.newline=''消除空格行
#2.文件不存在则新建,'w'代表只写
b=open(path_b,'w',newline='')       #open
reader=csv.reader(a)
writer=csv.writer(b)
rows=[row for row in reader]
for row in rows[0:5]:
    writer.writerow(row)
a.close()    #close
b.close()    #close
-------------------------------------------------------
#写法2
with open(path_a) as a:
	reader = csv.reader(a)
	rows=[row for row in reader]

with open(path_b,'w',newline='') as b:
    writer=csv.writer(b)
    for row in rows[0:5]:
        writer.writerow(row)

2、将文件a的后五行追加到上一步新建的文件b中

import csv
path_a=r'E:\pythonwork\data_raw.csv'
path_b=r'E:\pythonwork\data_pro.csv'
a=open(path_a) #open
#'a+'代表追加
b=open(path_b,'a+',newline='')       #open
reader=csv.reader(a)
writer=csv.writer(b)
rows=[row for row in reader]
for row in rows[-5::]:
    writer.writerow(row)
a.close()    #close
b.close()    #close

3、删除b文件的某一列

import csv
path_b=r'E:\pythonwork\data_pro.csv'
b=open(path_b,'r') 
reader=csv.reader(b)
rows=[row for row in reader]
column_len=len(rows[0])
#删除中间列
target=column_len//2
for i,row in enumerate(rows):
	rows[i].remove(row[target])
b.close()
b=open(path_b,'w',newline='') 
writer=csv.writer(b)
for row in rows:
	writer.writerow(row)
b.close()

以我有限的使用次数以及非常主观的感受,csv库只能进行基本的操作,行操作方便,列操作繁琐。Pandas库要更灵活。

(二)pandas库的基本操作

  • Pandas 是 Python 语言的一个扩展程序库,用于数据分析。
  • Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。
  • Pandas 名字衍生自术语 “panel data”(面板数据)和 “Python data analysis”(Python 数据分析)。
  • Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。
  • Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。
  • Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。
  • Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。

1、新建一个csv文件执行写入下表的内容

Costumer id Name Age
222645 张三 24
215421 李四 31
215958 王五 19
#查看python版本
import sys
sys.version

在这里插入图片描述

import pandas as pd
id=['222645','215421','215958']
name=['张三','李四','王五']
age=['24','31','19']
df=pd.DataFrame({'Costumer id':id,'Name':name,'Age':age})
#df.to_csv('costumer-information.csv')  会有乱码
df.to_csv('costumer-information.csv',encoding='gbk',index=None)  #含中文,需要改变编码方式;保存在同级目录下

2、新加一列/行信息

#添加一行
add_row_df=pd.DataFrame({'Costumer id':['222645'],'Name':['赵四'],'Age':['56']})
#new_df=pd.DataFrame({'Costumer id':'222645','Name':'赵四','Age':'56'})      会报错
add_row_df.to_csv('costumer-information.csv',mode='a',encoding='gbk',header=0,index=None)  #含中文,需要改变编码方式;保存在同级目录下
#添加一列——性别
add_col_df=pd.read_csv('costumer-information.csv',encoding='gbk')
add_col_df['sex']=['0','1','0','0']
add_col_df.to_csv('costumer-information.csv',columns=name.append('sex'),encoding='gbk',index=None,header=1)  #含中文,需要改变编码方式;保存在同级目录下

3、删除操作

关于删除的操作可以参考这篇博客《Python pandas 删除指定行/列数据》

4.举个栗子——以跨境电商数据为例的数据分析

数据可以在这里下载

import pandas as pd
csvfile='ecommerce_data.csv'
df=pd.read_csv(csvfile,encoding='ISO-8859-1')  #不加编码方式就会报错,详见下方链接的解释
df.head()  #输出前五行

csv文件的基本操作——Python_第1张图片

df.tail()   #输出最后五行

csv文件的基本操作——Python_第2张图片

df.columns  #输出列名
#正式开始分析
df=pd.read_csv(csvfile,encoding='ISO-8859-1',parse_dates=['InvoiceDate'])   #将时间强制转换格式
#删除不需要的列description
df.drop(['Description'],axis=1,inplace=True)
#查找Customer ID为空值的行,并填充标识
df['CustomerID'] = df['CustomerID'].fillna('U')
#增加单条商品销售总额
df['amount']=df['Quantity']*df['UnitPrice']
#处理时间
df['date'] = [x for x in df['InvoiceDate'].dt.date]
df['year'] = [x.year for x in df['InvoiceDate']]
df['month'] = [x.month for x in df['InvoiceDate']]
df['day'] = [x.day for x in df['InvoiceDate']]
df['time']= [x for x in df['InvoiceDate'].dt.time]
 
df.drop(['InvoiceDate'],axis=1,inplace=True)

#去除重复条目
df=df.drop_duplicates()
df.describe()
#Quantity存在负值,导致amout存在负值,这代表着退货

csv文件的基本操作——Python_第3张图片

#异常值处理
#查找是否存在单价是非正数
df1=df.loc[df['UnitPrice']<=0]
#计算异常数据的占比
print('单价异常的数据占比:{}%'.format(float(df1.shape[0]/df.shape[0]*100)))
#查找退货数据
df2=df.loc[df['Quantity']<=0]
#计算退货数据的占比
print('退货数据占比:{}%'.format(float(df2.shape[0]/df.shape[0]*100)))
#每年按月份统计退货的金额
import numpy as np
tt = pd.pivot_table(df2,index='year',columns='month',values='amount',aggfunc={'amount':np.sum})
tt

在这里插入图片描述

df_use=df[(df['UnitPrice']>0)&(df['Quantity']>0)]
#每年按月份统计销售金额
import numpy as np
pp = pd.pivot_table(df_use,index='year',columns='month',values='amount',aggfunc={'amount':np.sum})
#退货金额统计
withdraw=np.abs(tt/pp)
#每个客户所下的订单数量
F_value = df_use.groupby('CustomerID')['InvoiceNo'].nunique()
#每个客户的消费总金额
M_value = df_use.groupby('CustomerID')['amount'].sum()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style='darkgrid')
plt.hist(M_value[M_value<5000],bins=100)
plt.xlabel('Amount')
plt.ylabel('Customer number')
plt.show()

csv文件的基本操作——Python_第4张图片

你可能感兴趣的:(学习笔记,python,pandas,经验分享)