需求:读取一个csv文件,根据文件内容进行数据处理,将处理结果写入另一个csv文件。
实现:用Python导入pandas库,将csv文件读入一个DataFrame,然后将这DataFrame的内容写入另一个csv文件。
1. 导入pandas库。
numReportCube=0 # 776
2. 定义若干变量并赋初值用于后续数据处理。本示例中定义numReportCube用来统计某一种类型的数据的数量,初值为0。
numReportCube=0 # 776
3. 将csv文件的内容读入一个DataFrame。本示例中将这个DataFrame赋值给cube
for index in range(numCube):
cubeType=cube.iloc[index,3]
if cubeType==776:
numReportCube=numReportCube+1
else:
print('Unrecognized cube type in line '+str(index))
4. 因为数据处理的需求,需要知道cube里的内容一共有多少行(不包括表头),用cube.shape[0]即可得到cube的行数,类似地,用cube.shape[1]即可得到cube的列数。
5. 用range(numCube)得到一个取值范围用于for循环。
通过cube.iloc[index,3]取得第index行,第3列的单元格数据。
如果数值符合要求,则numReportCube计数器加1;
否则,打印警告信息:在第index行发现未识别的cube type信息。
for index in range(numCube):
cubeType=cube.iloc[index,3]
if cubeType==776:
numReportCube=numReportCube+1
else:
print('Unrecognized cube type in line '+str(index))
6. 将结果存入另一个DataFrame,即本示例中的resultItem。
结果为1行2列数据:第1列为cube数据的总行数numCube,第2列为某一种特定类型的数据的行数numReportCube。
resultItem=pd.DataFrame([[numCube,numReportCube]])
本示例中使用了DataFrame的一种定义方式:以列表形式定义DataFrame。举例说明:
某表格为3行2列,数据内容为:
a b
c d
e f
用DataFrame可以表示为:
df=([['a','b'],['c','d'],['e','f']])
7. 将结果resultItem写入另一个csv文件。
在以下示例中,第一个参数是待写入的文件路径。
第二个参数header是指是否保留表头,保留则为True,不保留则为False。
第三个参数index是指是否保留列的索引,保留则为True,不保留则为False。
第四个参数mode是指以何种模式写入数据,"a"是append的缩写,表示以“追加”的方式写入数据。
resultItem.to_csv('E:\Result.csv',header=False,index=False,mode="a")