1、针对更为复杂的CSV文件(含有标题和多列)做简单的处理和过滤

“CSV测试数据.csv”文件里的内容:

Python解析csv分隔符 python数据分析csv文档_python

CSV测试数据copy.csv”:

#!/usr/bin/env python3
#读取文本文件

import pandas as pd
input_file = "F://python入门//数据//CSV测试数据.csv"
output_file = "F://python入门//数据//CSV测试数据copy.csv"
f = open(input_file)
#当我们处理的CSV文件名带有中文时,如果没有open,直接read_csv就会报错。
#报错信息:OSError: Initializing from file failed
#将文件内容存放到data_frame中
data_frame = pd.read_csv(f)
#对“花费”进行了去除“$”和类型转换
data_frame['花费'] = data_frame['花费'].str.strip('$').astype(float)
#使用loc函数将满足性别是“女”或花费大于750的行取出
data_frame_value_meets_condition = data_frame.loc[(data_frame['性别'].str.contains('女'))|\
                                                  (data_frame['花费'] > 750.0),:]
#loc函数里面的“|”是或的意思,满足条件a或条件b
#print(data_frame_value_meets_condition)
#写入文件“CSV测试数据copy.csv”
data_frame_value_meets_condition.to_csv(output_file,index=False,encoding='gb2312')
#如果没有encoding='gb2312',会出现写入乱码

“CSV测试数据copy.csv”里的结果内容:

Python解析csv分隔符 python数据分析csv文档_CSV_02

2、针对更为复杂的CSV文件(含有标题和多列),当行中的值属于某个集合时,则保留输出这些行。

源数据:

Python解析csv分隔符 python数据分析csv文档_CSV_03

 

 当行中的值属于某个集合时,则保留输出这些行:

#!/usr/bin/env python3
#读取文本文件

import pandas as pd
input_file = "F://python入门//数据//CSV测试数据.csv"
output_file = "F://python入门//数据//CSV测试数据copy.csv"
f = open(input_file)
#当我们处理的CSV文件名带有中文时,如果没有open,直接read_csv就会报错。
#报错信息:OSError: Initializing from file failed
data_frame = pd.read_csv(f)
#将目标集合放到变量important_datas中
important_datas = ['18256785181','13698762112']
#将符合条件的目标数据集取出
data_frame_value_in_set = data_frame.loc[(data_frame['电话号码'].isin(important_datas)),:]
#将目标数据集导入“CSV测试数据copy.csv”中
data_frame_value_in_set.to_csv(output_file,index=False,encoding='gb2312')
#如果没有encoding='gb2312',会出现写入乱码

结果:

Python解析csv分隔符 python数据分析csv文档_python_04

 

 3、针对更为复杂的CSV文件(含有标题和多列),筛选出匹配某个模式的行

源数据:

Python解析csv分隔符 python数据分析csv文档_python_05

 

正则表达式的应用(代码): 

#!/usr/bin/env python3
#读取文本文件

import pandas as pd
input_file = "F://python入门//数据//CSV测试数据.csv"
output_file = "F://python入门//数据//CSV测试数据copy.csv"
f = open(input_file)
#当我们处理的CSV文件名带有中文时,如果没有open,直接read_csv就会报错。
#报错信息:OSError: Initializing from file failed
data_frame = pd.read_csv(f)
#将符合条件的目标数据集取出
data_frame_value_matches_pattern = data_frame.loc[data_frame['姓名'].str.startswith("王"),:]
#将目标数据集导入“CSV测试数据copy.csv”中
data_frame_value_matches_pattern.to_csv(output_file,index=False,encoding='gb2312')
#如果没有encoding='gb2312',会出现写入乱码

结果:

Python解析csv分隔符 python数据分析csv文档_Python解析csv分隔符_06

 

 4、针对更为复杂的CSV文件(含有标题和多列),根据索引值选取列

源文件:

Python解析csv分隔符 python数据分析csv文档_python_07

 

将索引值为0和3的列打印到屏幕,使用iloc函数来根据索引位置选取列。

#!/usr/bin/env python3
#读取文本文件

import pandas as pd
input_file = "F://python入门//数据//CSV测试数据.csv"
output_file = "F://python入门//数据//CSV测试数据copy.csv"
f = open(input_file)
#当我们处理的CSV文件名带有中文时,如果没有open,直接read_csv就会报错。
#报错信息:OSError: Initializing from file failed
data_frame = pd.read_csv(f)
#将符合条件的目标数据集取出
data_frame_column_by_index = data_frame.iloc[:,[0,3]]
#将目标数据集导入“CSV测试数据copy.csv”中
data_frame_column_by_index.to_csv(output_file,index=False,encoding='gb2312')
#如果没有encoding='gb2312',会出现写入乱码

结果集:

Python解析csv分隔符 python数据分析csv文档_Python解析csv分隔符_08

 

 5、针对更为复杂的CSV文件(含有标题和多列),根据列标题选取列

源数据:

Python解析csv分隔符 python数据分析csv文档_测试数据_09

 

 根据列标题选取列,使用loc函数选取列,代码:

#!/usr/bin/env python3
#读取文本文件

import pandas as pd
input_file = "F://python入门//数据//CSV测试数据.csv"
output_file = "F://python入门//数据//CSV测试数据copy.csv"
f = open(input_file)
#当我们处理的CSV文件名带有中文时,如果没有open,直接read_csv就会报错。
#报错信息:OSError: Initializing from file failed
data_frame = pd.read_csv(f)
#将符合条件的目标数据集取出
data_frame_column_by_name = data_frame.loc[:,['姓名','年龄']]
#将目标数据集导入“CSV测试数据copy.csv”中
data_frame_column_by_name.to_csv(output_file,index=False,encoding='gb2312')
#如果没有encoding='gb2312',会出现写入乱码

结果集:

Python解析csv分隔符 python数据分析csv文档_CSV_10

 

 6、针对更为复杂的CSV文件(含有标题和多列),选取连续的行,去除不需要的行

源数据:

Python解析csv分隔符 python数据分析csv文档_Python解析csv分隔符_11

 

 去除不需要的行,剩下的行重新生成索引:

#!/usr/bin/env python3
#读取文本文件

import pandas as pd
input_file = "F://python入门//数据//CSV测试数据.csv"
output_file = "F://python入门//数据//CSV测试数据copy.csv"
f = open(input_file)
#当我们处理的CSV文件名带有中文时,如果没有open,直接read_csv就会报错。
#报错信息:OSError: Initializing from file failed
#无标题行
data_frame = pd.read_csv(f,header=None)
#将不需要的行删掉,开头三行和结尾三行
data_frame = data_frame.drop([0,1,2,9,10,11])
#使用iloc函数选取第一行单独作为列索引,
data_frame.columns = data_frame.iloc[0]
print(data_frame.columns)
#删除第一行(标题行),为数据框重新生成索引
data_frame = data_frame.reindex(data_frame.index.drop(3))
print('……')
print(data_frame)
#将目标数据集导入“CSV测试数据copy.csv”中
data_frame.to_csv(output_file,index=False,encoding='gb2312')
#如果没有encoding='gb2312',会出现写入乱码

结果数据:

Python解析csv分隔符 python数据分析csv文档_测试数据_12

 

Spyder右下角打印出来的数据:

Index(['姓名', '性别', '年龄', '总得分', '电话号码', '花费'], dtype='object', name=3)
……
3  姓名 性别  年龄  总得分         电话号码       花费
4  李刚  男  32  567  18512349553  $500.00
5  王红  女  54  423  18256785181  $750.00
6  孙晓  女  25  457  13698762112  $250.00
7  郭亮  男  65  350  18654320816  $125.00
8  高英  女  15  390  18511113141  $815.00

 7、针对更为复杂的CSV文件(含有标题和多列),添加标题行

源数据:

Python解析csv分隔符 python数据分析csv文档_CSV_13

 添加新标题行:

#!/usr/bin/env python3
#读取文本文件

import pandas as pd
input_file = "F://python入门//数据//CSV测试数据.csv"
output_file = "F://python入门//数据//CSV测试数据copy.csv"
f = open(input_file)
#当我们处理的CSV文件名带有中文时,如果没有open,直接read_csv就会报错。
#报错信息:OSError: Initializing from file failed
#设置标题行
header_list = ['姓名','性别','年龄','总得分','电话号码','花费']
#原始无标题行,添加新标题行
data_frame = pd.read_csv(f,header=None,names=header_list)
#将目标数据集导入“CSV测试数据copy.csv”中
data_frame.to_csv(output_file,index=False,encoding='gb2312')
#如果没有encoding='gb2312',会出现写入乱码

结果:

Python解析csv分隔符 python数据分析csv文档_Python解析csv分隔符_14

 

 8、针对更为复杂的CSV文件(含有标题和多列),从多个文件中连接数据

数据源是三个CSV文件:

Python解析csv分隔符 python数据分析csv文档_CSV_15

 

 为了方便,这里每个CSV文件的内容都相同,以其中一个CSV文件为例:

Python解析csv分隔符 python数据分析csv文档_python_16

 

 将这三个内容相同的CSV文件合并:

#!/usr/bin/env python3
#读取文本文件

import pandas as pd
import glob
import os
#输入文件路径
input_path = "F://python入门//数据"
output_file = "F://python入门//数据//CSV测试数据copy.csv"
#将以开头为“CSV测试数据copy”的文件放到all_files中
all_files = glob.glob(os.path.join(input_path,'CSV测试数据copy*'))
#将三个目标文件的内容都放到列表all_data_frames中
all_data_frames = []
for file in all_files:
    #打开每个文件
    f = open(file)
    #读取每个文件,重新设置一列成为index值
    data_frame = pd.read_csv(f,index_col = None)
    all_data_frames.append(data_frame)
#这里,如果你需要平行连接数据,就设置axis=1,指连接后再重新赋值index(len(index))
data_frame_concat = pd.concat(all_data_frames,axis=0,ignore_index=True)
#将目标数据集导入“CSV测试数据copy.csv”中
data_frame_concat.to_csv(output_file,index=False,encoding='gb2312')
#如果没有encoding='gb2312',会出现写入乱码

结果为生成文件“CSV测试数据copy.csv”,其内容为:

Python解析csv分隔符 python数据分析csv文档_python_17

 

 9、针对更为复杂的CSV文件(含有标题和多列),计算每个文件中值的总和和均值

 源数据为四个文件夹,三个相同内容的文件,一个是前三个文件的汇总:

Python解析csv分隔符 python数据分析csv文档_CSV_18

 

 这三个文件与(8)中的例子一样,这里不再赘述。

另一个汇总的文件:

Python解析csv分隔符 python数据分析csv文档_测试数据_19

 

 其内容为前三个文件内容的加总:

Python解析csv分隔符 python数据分析csv文档_python_20

 

 对这三个文件取中的花费字段取总和和均值:

#!/usr/bin/env python3
#读取文本文件

import pandas as pd
import glob
import os
#输入文件路径
input_path = "F://python入门//数据"
output_file = "F://python入门//数据//CSV测试数据copy_new.csv"
#将以开头为“CSV测试数据copy”的文件放到all_files中
all_files = glob.glob(os.path.join(input_path,'CSV测试数据copy*'))
#将三个目标文件的内容都放到列表all_data_frames中
all_data_frames = []
for input_file in all_files:
    #打开每个文件
    f = open(input_file)
    #读取每个文件,重新设置一列成为index值
    data_frame = pd.read_csv(f,index_col = None)
    #求花费总和
    total_sales = pd.DataFrame([float(str(value).strip('$').replace(',',''))\
                                for value in data_frame.loc[:,'花费']]).sum()
    print(total_sales)
    #求花费均值
    average_sales = pd.DataFrame([float(str(value).strip('$').replace(',',''))\
                                for value in data_frame.loc[:,'花费']]).mean()
    print(average_sales)
    #生成一个字典
    data = {'file_name':os.path.basename(input_file),
            'total_sales':total_sales,
            'average_sales':average_sales}
    #将处理的每个文件的总和和均值放到all_data_frames中
    all_data_frames.append(pd.DataFrame(data,columns = ['file_name','total_sales',\
                                                         'average_sales']))
#这里,如果你需要平行连接数据,就设置axis=1,指连接后再重新赋值index(len(index))
data_frame_concat = pd.concat(all_data_frames,axis=0,ignore_index=True)
#将目标数据集导入“CSV测试数据copy.csv”中
data_frame_concat.to_csv(output_file,index=False,encoding='gb2312')
#如果没有encoding='gb2312',会出现写入乱码

生成的“CSV测试数据copy_new.csv”结果:

Python解析csv分隔符 python数据分析csv文档_CSV_21

 

 打印到Spyder右下角的结果:

0    7320.0
dtype: float64
0    488.0
dtype: float64
0    2440.0
dtype: float64
0    488.0
dtype: float64
0    2440.0
dtype: float64
0    488.0
dtype: float64
0    2440.0
dtype: float64
0    488.0
dtype: float64