概述
目录
- 【Python编程】应用系列1-使用pandas实现.csv文件的拆分或者合并
- 9.1 什么是Pandas?如何安装?
- 9.2 使用pandas合并一个文件夹的所有.csv文件
- 9.3 使用pandas拆分一个.csv文件
【Python编程】应用系列1-使用pandas实现.csv文件的拆分或者合并
我的博客专栏Python编程系列文章。Python环境配置参考《【Python学习】Windows10开始你的Anaconda安装与Python环境管理》或者《【Python学习】纯终端命令开始你的Anaconda安装与Python环境管理》。
作者: 陈艺荣
代码环境: Python3、jupyter notebook
9.1 什么是Pandas?如何安装?
-
Pandas 是 Python 语言的一个扩展程序库,提供高性能、易于使用的数据结构和数据分析工具。
-
Pandas 名字衍生自术语 “panel data”(面板数据)和 “Python data analysis”(Python 数据分析)。
-
Pandas 一个强大的分析结构化数据的工具集,可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。
-
Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。
-
Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。
在conda环境中安装pandas非常简单,只需要使用以下命令即可:
方式1:使用pip安装
pip install pandas
方式2:使用conda安装
conda install pandas
Pandas的数据结构为,DataFrame,一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。而Series则 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。我们把一个.csv文件读取进来就是一个DataFrame对象。DataFrame 构造方法如下:
pandas.DataFrame( data, index, columns, dtype, copy)
参数说明:
- data:一组数据(ndarray、series, map, lists, dict 等类型)。
- index:索引值,或者可以称为行标签。
- columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
- dtype:数据类型。
- copy:拷贝数据,默认为 False。
DataFrame 是一个二维的数组结构,类似二维数组。
9.2 使用pandas合并一个文件夹的所有.csv文件
例如,在./MELD
路径下存在如下三个文件:
dev_sent_emo.csv
test_sent_emo.csv
train_sent_emo.csv
这是知名的对话情感识别数据集MELD的三个文件
假设我想将这三个csv文件合并为一个MELD_total_text.csv
文件
pd.read_csv
:这是pandas最常用的函数,使用该函数可以把csv格式的文件读进来,它的使用格式为:
import pandas as pd
df = pd.read_csv('filename.csv')
os.path.isfile
:判断文件是否存在
如下为实现该功能的函数,可以直接复制该段代码拿去使用:
import os
import pandas as pd
from os.path import join
def combine_csv_files(re_encode_path, save_name, files, save_in):
'''combine_csv_files
将指定路径下的所有csv文件合并为一个csv文件
使用示例:
file_names = os.listdir("./MELD/")
combine_csv_files(re_encode_path="./MELD/",
save_name="MELD_total_text",
files=file_names,
save_in="./MELD/")
'''
if os.path.isfile(join(save_in, "%s.csv") % save_name):
# 如果已经存在合并后的文件,则直接return 0
return 0
else:
try:
main_list = []
for i in range(len(files)):
content = pd.read_csv(join(re_encode_path, files[i]), encoding="UTF-8-SIG")
if i == 0:
main_list.extend([list(content.keys())])
main_list.extend(content.values.tolist())
main_dict = {}
for i in list(zip(*main_list)):
main_dict[i[0]] = list(i[1:])
data_df = pd.DataFrame(main_dict)
data_df.to_csv(join(save_in, "%s.csv") % save_name, encoding="UTF-8-SIG", index=False)
except:
print("合并[%s]时发生错误" % save_name)
使用示例:
if True: # 设置标记是否运行
file_names = os.listdir("./MELD/") # 文件名列表
combine_csv_files(re_encode_path="./MELD/",
save_name="MELD_total_text",
files=file_names,
save_in="./MELD/")
9.3 使用pandas拆分一个.csv文件
例如,将一个大的csv文件拆分为训练集、验证集、测试集。
如下为实现该功能的函数,可以直接复制该段代码拿去使用:
import os
import random
import pandas as pd
from os.path import join
def shuffle_total_data(data_path="./MELD/MELD_total_text.csv",
save_path="./MELD/",
index_name="Dialogue_ID",
validation_split_percentage=0.1,
test_split_percentage=0.1,
regen=False):
'''shuffle_total_data
将一个.csv文件(例如:CPED_total_text.csv)随机打乱,拆分为训练集、验证集、测试集,分别保存
使用示例:
shuffle_total_data(data_path="./MELD/MELD_total_text.csv",
save_path="./MELD",
index_name="Dialogue_ID",
validation_split_percentage=0.1,
test_split_percentage=0.1,
regen=False)
'''
if regen==False:
print("不进行重复生成!")
else:
print("Read dataset from ", data_path)
data = pd.read_csv(data_path, encoding="UTF-8-SIG")
# 划分为训练集、测试集
keys = list(set(data[index_name]))
random.shuffle(keys) # 随机打乱
validation_split_id = int(len(keys)*(1-validation_split_percentage-test_split_percentage))
test_split_id = int(len(keys)*(1-test_split_percentage))
train_keys = keys[:validation_split_id] # 训练集索引
valid_keys = keys[validation_split_id:test_split_id] # 验证集索引
test_keys = keys[test_split_id:] # 测试集索引
train_data = data[data[index_name].isin(train_keys)]
valid_data = data[data[index_name].isin(valid_keys)]
test_data = data[data[index_name].isin(test_keys)]
train_data.to_csv(join(save_path,"train_shuffle_split.csv"), encoding="UTF-8-SIG", index=False)
valid_data.to_csv(join(save_path,"valid_shuffle_split.csv"), encoding="UTF-8-SIG", index=False)
test_data.to_csv(join(save_path,"test_shuffle_split.csv"), encoding="UTF-8-SIG", index=False)
print("已经完成数据集生成!")
以上代码实现读取一个csv文件,然后根据指定的索引('Dialogue_ID’列)进行打乱操作,打乱操作使用如下代码实现:
keys = list(set(data['Dialogue_ID']))
random.shuffle(keys) # 随机打乱
使用示例:
shuffle_total_data(data_path="./MELD/MELD_total_text.csv",
save_path="./MELD",
index_name="Dialogue_ID",
validation_split_percentage=0.1,
test_split_percentage=0.1,
regen=True)
Read dataset from ./MELD/MELD_total_text.csv
已经完成数据集生成!
最后
以上就是懵懂洋葱为你收集整理的【Python编程】应用系列1-使用pandas实现.csv文件的拆分或者合并【Python编程】应用系列1-使用pandas实现.csv文件的拆分或者合并的全部内容,希望文章能够帮你解决【Python编程】应用系列1-使用pandas实现.csv文件的拆分或者合并【Python编程】应用系列1-使用pandas实现.csv文件的拆分或者合并所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复