前文讲到了利用pandas去处理一些属性匹配的问题
本篇博文的重点在于利用pandas去处理一些列问题,以及一些对于行问题的处理
那么我们还是利用之前的csv模板,如图:
赠上下载地址
1.利用基础python 根据列索引值,引入csv文件
代码:
#利用基础python处理 利用列索引值
import csv
index_list=[0,2]
input_file="supplier_data.csv"
out_file="the_first_csv.csv"
with open(input_file,"r",newline="") as file_read:
with open(out_file,"w",newline="") as file_write:
filereader=csv.reader(file_read)#创建读取对象
filewriter=csv.writer(file_write)#创建写入对象
for row_list in filereader:
row=[]#每一次创建一个空的可用的列表
for index in index_list:
row.append(row_list[index])
#print(row)
filewriter.writerow(row)
那么我们依然是要利用csv模块,所以先行引用模块 import csv
代码非常简单,重点就在于后半部分的两个for
1.for:我们用一个占位符 row_list 作为在filereader每一次迭代的对象,这个row_list是一个列表,前文已经讲过了,filereader其实就是一系列列表
,且每次迭代我们都会创建一个新的空列表,这个列表是为了承受需要写入目的文件的内容而存在的。
2.for:第二个for循环目的是将我们需要的索引内容添加到row中
alright,很简单的代码也很容易理解
2.利用pandas模块,处理列索引值的问题
代码:
#利用pandas模块处理 列索引值
import pandas as pd
input_file="supplier_data.csv"
out_file="the_first_csv.csv"
input_frame=pd.read_csv(input_file)
index_frame=input_frame.iloc[:,[1,2]]#iloc()的用法:iloc([index_row_list],[index_line_list]):(前者为行的索引列表,后者为列的索引列表)
index_frame.to_csv(out_file,index=False)
这里涉及到一些新的函数,没关系,我们慢慢来。
首先,read_csv与to_csv前文已经讲过了。这里不需要再讲。
我们重点在于iloc函数
iloc()函数:
这里的i是integer: 整数,那么很明显iloc函数,的参数只能是整数。它的两个参量iloc(1,2):第一个参量是行的索引列表,第二个参量是列的索引列表。
这段代码的结果如下:
我们这里的写法是index_frame=input_frame.iloc[:,[1,2]]前面是冒号其实是全部行的意思,而后面就是索引1和索引2的列。
这里我们改成index_frame=input_frame.iloc[[1,2]:,[1,2]]
那么结果便如下:
很容易理解,抽取索引为1,2的行。这段代码也差不多了
3.基础python利用列“标题”来选取特定列
上代码:
#基础python使用列标题来,选取特定列
import csv
input_file="supplier_data.csv"
out_file="the_first_csv.csv"
columns_list=["Invoice Number","Part Number"]
my_columns_index=[]
with open(input_file,"r",newline="") as fileread:
with open(out_file,"w",newline="") as filewrite:
filereader=csv.reader(fileread)
filewriter=csv.writer(filewrite)
head=next(filereader)
for index in range(len(head)):
if head[index] in columns_list:
my_columns_index.append(index)
filewriter.writerow(columns_list)
for row_list in filereader:
a_row=[]
for index in my_columns_index :
a_row.append(row_list[index])
filewriter.writerow(a_row)
#这里出现了一些小差错,不过没关系,我已经解决了,很显然我们使用基础python来选取列目标会很麻烦,倒不如pandas来的更方便一点,但是基础还是得掌握
那么很明显,一看代码就知道麻烦。我们大概分析一下,我们如要要根据列标题来选定列的话,首先我们需要把需要选定的列的属性写在文件头吧,继而我们要通过还要把属于这一列的每一行的内容去筛选出来吧,那么我们必须利用索引了。
第三行:我们把需要筛选出来的列标题放在一个列表里面
第十行往后:我们添加标题的代码与之前稍有不同,但可以看得懂,我们利用索引去我们需要的标题写入文件
两个for循环:第一个for循环,是使占位符row_list在模板的数据行开始遍历,第二个for循环,我们利用之前的索引,把我们需要的数据都添入我们每一次需要的空列表,在使用writerow函数写入目标文件。
ok,很清楚了
利用pandas 利用列标题选取特定列
上面我们已经看到了,利用基础python真的是非常的麻烦,所以我个人还是建议利用pandas
代码:
#pandas使用列标题来选取特定列(优于基础python)
import pandas as pa
input_file="supplier_data.csv"
out_file="the_first_csv.csv"
data_frame=pd.read_csv(input_file)
data_frame_bn=data_frame.loc[:,['Invoice Number',"Part Number"]]#loc()根据属性分类
data_frame_bn.to_csv(out_file,index=False)
#很显然pandas处理起来较为方便,这都不是较为方便了,很显然pandas处理起来很方便,我们可以看到代码会简短很多
非常简短。
代码里面很多内容之前已经讲过,我们这里只需要重点讲到一个东西:
loc函数:
loc函数:与iloc不同的地方在于,loc函数不会被interge(整形)限制
如图:
alright finished